Kafka 如何保证消息不丢失

文章探讨了Kafka在生产者、Broker和消费者环节中可能出现的消息丢失问题及其解决方案,包括生产者使用异步回调和消息确认机制,设置重试次数;Broker利用多副本机制防止数据丢失;消费者关闭自动提交,实现幂等处理,以及确保系统高可用的策略。
摘要由CSDN通过智能技术生成

1、生产者

1.1 丢失原因:

  • kafka生产端异步发送消息后,不管broker是否响应,立即返回,伪代码producer.send(msg),由于网络抖动,导致消息压根就没有发送到broker端;
  • kafka生产端发送消息超出大小限制,broker端接到以后没法进行存储;

1.2 解决方案:

  • 1、生产者调用异步回调消息。伪代码如下: producer.send(msg,callback);
  • 2、生产者增加消息确认机制,设置生产者参数:acks = all。partition的leader副本接收到消息,等待所有的follower副本都同步到了消息之后,才认为本次生产者发送消息成功了;
  • 3、生产者设置重试次数。比如:retries>=3,增加重试次数以保证消息的不丢失;
  • 4、定义本地消息日志表,定时任务扫描这个表自动补偿,做好监控告警。
  • 5、后台提供一个补偿消息的工具,可以手工补偿。

2、Broker

2.1 丢失原因:

kafka broker集群接收到数据后会将数据进行持久化存储到磁盘,消息都是先写入到页缓存,然后由操作系统负责具体的刷盘任务或者使用fsync强制刷盘,如果此时Broker宕机,且选举一个落后leader副本很多的follower副本成为新的leader副本,那么落后的消息数据就会丢失。

2.2 解决方案:

  • 1、同步刷盘(不太建议)。同步刷盘可以提高消息的可靠性,防止由于机器掉电等异

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值