kafka ack机制/出现故障数据同步问题

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的LEO大于等于该Partition的HW,即 follower追上 leader之后,就可以重新加入ISR了。v

2、leader发生故障:

leader 发生故障之后,会从ISR中选出一个新的leader,之后,为保证多个副本之间的数据一致性,其余的follower会先将各自的 log文件高于HW的部分截掉,然后从新的leader同步数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值