kafka如何保障数据不丢失

这篇具有很好参考价值的文章主要介绍了kafka如何保障数据不丢失。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.首先可以增加冗余的分区数,降低丢失数据风险,通过维护偏移量保障数据的精确一次性消费。
生产者端
写入需要用到kafka提供的API,通过与kafka的broker建立连接完成写入,很重要的数据为了防止丢失最保险的是可以用数据库记录已经成功写入kafka的数据编号。每次生产者启动时候先读取配置。避免程序终止再次启动数据漏传导致丢失。

集群增加增加一定的broker,如果broker不多和topic分区的冗余数量。建议冗余数量小于或者等于broker总数。减少写入buff的参数大小,让数据尽可能落盘快些。
kafka保存数据的磁盘做raid10或者raud5;硬件的层面做数据冗余。

producer.send(msg):俗称“发后即忘”,不管消息有没有成功写入到broker端,生产者都不会收到任何通知,那么到消息因为某些原因(如:网络异常,消息体过大等)并未被broker接受时,就产生了消息丢失。,
producer.send(msg,callback):带有回调函数,通过callback的回调来处理broker端的响应结果,如果未成功发送,那么就可以做响应的处理工作,如进行重试,记录日志等。
在kafka中,对于某些异常,生产者捕获到异常会,会进行异常重试,重试的次数是由retries参数来控制的,因此为了保证消费的可靠性,还需要将这个参数的值设置为大于0的值,一般可设置为3~5。

同时对于生产者而言,还有一个重要的参数需要设置,就是acks的值,acks可以设置为 1,0,-1三个值,每个值的含义如下
0:生产者发送消息后,不需要等待任何服务端的响应。
1:其默认值为此值,表示生产者将消息成功写入到leader副本中,服务端就会返回成功响应。
-1 或 all:生产者发送消息后,消息需要写入ISR集合中全部副本,才算提交成功。
因此为了保证消息的可靠性,需要将acks参数设置为-1,这样可以避免leader结点宕机后,follower结点没有及时同步到消息,而产生的数据丢失。

broker端可靠性
在kafka中,每条消费都会被存储到磁盘上进行持久化存储,即使broker因为异常进行重启,也不会消息丢失,并且在生产环境,kafka都是以集群的方式进行部署,同时因为kafka的分区和副本的特性,一般可以保证broker端的消息不丢失的情况,但是也有一些特殊情况下存在消息丢失的可能。

broker端的参数设置不合理:对于每个消费分区而言,副本数replication.factor >= 3,消息进行多余的冗余备份,可以防止因为broker端异常,导致的消息丢失。

当所有follower副本的消息同步无法同步leader副本时,就会自动退送ISR集合,这个时候ISR集合只有1条记录,当出现这种情况时,生产端acks设置为-1就退化了1,此时leader分区出现异常时,就会出现消息丢失的情况,所以需要设置min.insync.replicas > 1,这个参数用来控制消息需要最小写入的副本数。

当leader副本出现异常后,kafka回进行重选举,从follower副本中,选出新的leader节点,如果选出的新leader副本的消息落后于此前的leader副本,也会存在消息丢失的情况,所以需要将参数unclean.leader.election.enable = false,表示不允许,非ISR集合中的分区,进行leader选举。

在kafka中,每一条消息就是自己offset偏移量,消费者每次消费完消息后,都会提交自己消费的位移,如下图所示,消费A消费到offset = 9的数据,消费者B消费到offset = 11的数据。consumer会提交自己的消费位移,用来知道自己消费的位置,如果消费位移提交不当,也会产生消息没有消费的情况。
自动提交:设置为enable.auto.commit为true,表示开启自动提交,自动提交会在每次调用poll时,提交上次poll时的消费位移,每次poll时,都是提交上次的offset的位移,如果是在单线程的情况,不会出现消费丢失的情况,但是对应多线程的应用来说,就有可能出现消费丢失的情况,例如我们每次poll到的数据都先放在一个队列中,用一个专门的线程来处理队列中的数据,但是我们poll的时候,上次提交的位移还没有完成消费,消费端出现了宕机,这个时候消费端重启后,就会出现消息丢失的情况。

手动提交,使用commitSync() 和 commitASync()API来进行手动提交,手动提交,可以让我们根据自己的实际消费情况来设置什么时间点进行提交位移,将位移提交交给用户自己,合理设置位移提交点可以保证消费的消费不丢失

在producer端使用,不要使用producer.send(msg)的API,要使用producer.seng(msg,callback)带有回调方法的API,来进行消息发送会掉确认。
producer端设置acks=all,表示消息全部提交到ISR集合中的全部分区,才算消息提交成功。
producer端设置retries > 0,此参数,表示当生产者发送出现异常(如:broker出现网络抖动,导致超时)producer端进行重试的次数。
broker端,unclean.leader.election.enable = false,表示不允许,非ISR集合中的分区,进行leader选举,因为如果一个follower分区,消息落后于leader分区太远,当这个follower成为leader分区后,就会存在消息丢失。
broker端,replication.factor >= 3,表示副本的数量,消息进行多余的冗余备份,可以防止因为broker端异常,导致的消息丢失。
broker端,min.insync.replicas > 1,这个参数用来控制消息需要最小写入的副本数。
consumer端,将自动提交改为手动提交,确认消息消费完成后,在进行提交。文章来源地址https://www.toymoban.com/news/detail-727460.html

到了这里,关于kafka如何保障数据不丢失的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • kafka如何保证数据不丢失?

    生产者生产数据有两种模式:一种是同步模式,一种是异步模式。 同步模式:生产者生产一条数据,就保存一条数据,保存成功后,再生产下一条数据,能够保证数据不丢失,但是效率太低了。 异步模式(采用ack机制): 在producer端开启一块buff缓冲,用来缓存数据,缓存一批

    2023年04月27日
    浏览(36)
  • kafka如何保证数据不丢失

    1.1 生产者如何保证数据不丢失 ACK机制: 当生产者将数据生产到Broker后, Broker应该给予一个ack确认响应, 在kafka中, 主要提供了三种ack的方案:     ack=0 : 生产者只管发送数据, 不关心不接收Broker给予的响应     ack=1 : 生产者将数据发送到Broker端, 需要等待Broker端对应的Topic上对应

    2024年02月06日
    浏览(40)
  • 分布式系统的容错性和可用性该如何保证?——云计算高手的指南

    作者:禅与计算机程序设计艺术 云计算的快速发展给我们带来了巨大的机遇。不仅如此,云计算还解决了一些复杂的问题,比如资源共享、弹性伸缩等问题。但是,云计算也引入了新的复杂性,比如分布式系统的容错性、可用性等问题。如果分布式系统不能很好的处理容错性

    2024年01月19日
    浏览(51)
  • kafka是如何保证数据不丢失的

    Kafka通过一系列机制来确保数据不丢失,这些机制涵盖了生产者、Broker和消费者等关键环节。以下是Kafka保证数据不丢失的主要方式: 生产者生产数据不丢失: 同步方式:生产者发送数据给Kafka后,会等待Kafka的确认。如果在一定时间内(如10秒)没有收到Broker的ack响应,生产

    2024年04月25日
    浏览(40)
  • 【103期】RabbitMQ 实现多系统间的分布式事务,保证数据一致性

    org.springframework.boot spring-boot-starter-amqp mysql mysql-connector-java runtime org.projectlombok lombok true org.springframework.boot spring-boot-starter-jdbc com.alibaba fastjson 1.2.17 3.2.1.2配置文件内容: server: port: 8080 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/test?useUnicode=tru

    2024年04月14日
    浏览(65)
  • 如何保证分布式系统中服务的高可用性:应对 ZooKeeper Leader 节点故障的注册处理策略

    作者:zhaokk 在现代分布式系统中,高可用性是一个至关重要的。分布式系统中的各个组件需要保证在各种异常情况下仍然能够正常工作,确保系统的稳定性和可靠性。ZooKeeper(以下简称为zk)作为一种常用的分布式协调服务,为分布式系统中的各种任务提供了基础支持

    2024年02月11日
    浏览(67)
  • 【大数据工具】Kafka伪分布式、分布式安装和Kafka-manager工具安装与使用

    Kafka 安装包下载地址:https://archive.apache.org/dist/kafka/ 1. Kafka 伪分布式安装 1. 上传并解压 Kafka 安装包 使用 FileZilla 或其他文件传输工具上传 Kafka 安装包: kafka_2.11-0.10.0.0.tgz 解压安装包 2. 编辑配置文件 3. 拷贝并修改配置文件 分别修改 server2.properties、server3.properties 4. 创建日志

    2024年02月14日
    浏览(48)
  • 本地消息表模式保障分布式系统最终一致性

    订单表 消息表 process_queue 库存系统 return_queue 说明 成功 失败 / / / 订单库回滚 成功 成功 失败 / / 订单系统重发消息 成功 成功 成功 失败 / Broker自动重试,注意接口幂等 成功 成功 成功 库存不足退回 / Broker通知回掉,订单/消息作废 成功 成功 成功 成功 失败 订单系统重发消

    2024年04月28日
    浏览(45)
  • 如何保证Kafka不丢失消息

    丢失消息有 3 种不同的情况,针对每一种情况有不同的解决方案。 生产者丢失消息的情况 消费者丢失消息的情况 Kafka 弄丢了消息 生产者丢失消息的情况 生产者( Producer ) 调用 send 方法发送消息之后,消息可能因为网络问题并没有发送过去。所以,我们不能默认在调用 send(

    2024年01月16日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包