kafka的ack有三种:
0:
producer不等待broker的ack,这一操作提供了一个最低的延迟,broker一接收到还没有写入磁盘就已经返回,当broker故障时有可能丢失数据;
例如:当leader挂了,producer仍然往这个leader发送消息,就会造成数据丢失
1:
producer等待broker 的ack,partition的leader落盘成功后返回ack,如果在 follower同步成功之前leader 故障,那么将会丢失数据;
例如:当leader已经将收到的数据写入磁盘然后发送ack,但是follower还没有同步消息,那么此时leader挂了的话,这些数据将会丢失。
-1:
producer等待broker的ack,partition的 leader和 follower全部落盘成功后才返回ack。但是如果在 follower同步完成后,broker发送ack 之前,leader 发生故障,那么会造成数据重复。
例如:follower刚刚同步完成,此时leader还没有发送ack,leader挂了之后,重新选出新的leader,而producer没有收到ack,于是重发消息,此时新leader又收到了相同的消息,产生数据重复的问题。
发生故障数据同步:

1、follower发生故障:
follower发生故障后会被临时踢出ISR,待该follower恢复后,follower会读取本地磁盘记录的上次的HW,并将log 文件高于HW的部分截取掉,从HW开始向leader进行同步。等该follower的L

本文详细介绍了Kafka的三种acks设置及其在数据丢失和重复情况下的场景分析,以及在leader和follower故障时的数据同步策略。当follower故障,它会截取高于HW的日志并从HW开始同步;而leader故障时,新的leader会确保所有follower同步完数据再进行服务。这些机制确保了分布式环境中的数据一致性和可用性。
最低0.47元/天 解锁文章
1263

被折叠的 条评论
为什么被折叠?



