Kafka什么情况下会丢失消息?如何做到消息不丢失?

作为一个消息中间件,如果在运行过程中丢失消息,往往是很难排查和追溯的,Kafka也会存在丢失消息的情况,今天我想分析一下Kafka丢失消息的几个原因,以及如何尽可能的防止消息不丢失。在分析Kafka丢失消息的时候,我准备从broker、producer、consumer三端进行分析。

1.broker
producer发送消息到broker端,如果broker接收并保存该消息,返回ack标记到producer,那么认为该消息已经生产并发送完成。
kafka中ack有三种模式:
ack=0,即生产者发送完消息就认为该消息已经发送成功,并不会等到broker的响应,这种是效率比较高的一种方式,但极有可能丢失消息,所以一般不建议使用。
ack=1,即只要写入leader副本成功就认为消息发送成功,就会返回ack到producer,并不会等到该消息同步到其他follower才ack。一般情况下这种是没有问题的,但还是会存在丢失消息的情况,比如leader副本接收到了消息并返回ack到producer,但是此时ISR中的follower副本还没有同步完这条消息,此时leader副本挂了,ISR中的follower会被重新选举为leader,由于之前没有同步完该消息,导致该follower没有这条消息,之前producer也已经收到ack,认为已经发送成功,无法重发消息,那么这条消息就丢失了。(leader的HW是ISR中所有副本中LEO最靠前的那个位置,即消费者只能消费HW位置之前的消息),后面由于新成为leader的follower没有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值