kafka可靠性分析

分区可靠性保证

Kafka维护一个AR(All Partition)列表,由ISR(与Leader数据同步的Replica)和OSR(与Leader数据不同步的Replica)组成。刚开始所有的副本都在ISR中,在kafka工作的过程中,因为各种问题(网络、磁盘、内存)导致某些副本同步速度慢于replica.lag.time.max.ms指定的阈值,则它们被踢出ISR,移动到OSR中。 kafka默认配置下,ISR中的所有Replica数据从Leader中同步完成,生产者才会认为数据提交成功,因此ISR的数据不易过多,而且他们之间的网络也应该畅通。OSR内的Replica是否同步了leader的数据不影响数据是否提交成功,它们会尽力不断从Leader中同步数据(出现OSR需要及时运维人员,排查故障,让其尽快回到ISR中,降低集群宕机的风险)

截断机制

.HW(HighWatermark):数据被成功提交(ISR中的所有Replica同步完成),HW更新到该位置,HW之前的数据才可以被消费者访问,保证没有同步完成的数据不会被消费者访问到,这就是隔离性(两个事务之间互不影响)。

在leader宕机后,只能从ISR列表中选取新的leader,无论ISR中哪个副本被选为新的leader都知道HW之前的数据,可以保证在切换了leader后,消费者可以继续看到之前已经提交的数据

 

如果leader宕机,选出了新的leader,而新的leader并没有完全同步之前leader的所有数据,之后又接受了新的数据,此时旧的leader恢复,则会发现新的leader中的数据和自己持有的数据不一致,此时旧的leader会将自己的数据截断到宕机之前的hw位置,并同步新leader的数据

生产可靠性保证

生产者向leader发送数据时,可以选择需要的可靠性级别 ,通过request.required.acks参数配置:

0 - 生产者不停向leader发送数据,而不需要leader反馈成功消息
        这种模式效率最高,可靠性最低
        可能在发送过程中丢失数据
        可能在leader宕机时丢失数据
​
    1 - 生产者发送数据给leader,leader收到数据后要等到ISR列表中的所有副本都同步数据完成后,才向生产者发送成功消息,如果一直收不到成功消息,则认为发送数据失败会自动重发数据.
        这种模式下可靠性很高,但是当ISR列表中只剩下leader时,当leader宕机让然有可能丢数据
        此时可以配置min.insync.replicas指定要求观察ISR中至少要有指定数量的副本,默认该值为1,需要改为大于等于2的值
        这样当生产者发送数据给leader但是发现ISR中只有leader自己时,会收到异常表明数据写入失败,此时无法写入数据,保证了数据绝对不丢
        虽然不丢但是可能会多数据,例如生产者发送数据给leader,leader同步数据给ISR中的follower,同步到一半leader宕机,此时选出新的leader,可能具有部分此次提交的数据,而生产者收到失败消息重发数据,新的leader接受 数据则数据重复了

因此kafka只支持At Most Once和At Least Once,不支持Exactly Once(到业务中去重)

leader选举

默认配置下,当leader宕机时会选择ISR中的一个follower成为新的leader,如果ISR中的所有副本都宕机,而又要求集群可用,那么有下面两种选择:

1.必须等待ISR列表中的副本活过来才选择其成为leader继续工作,将unclean.leader.election.enable设置为false

2.选择任何一个活着的副本可能不在ISR中成为leader继续工作,将unclean.leader.election.enable设置为true

第一种方法,可靠性有保证,但是可用性变低,只有最后挂了的leader活过来kafka集群才能继续工作

第二种方法,可用性高,可靠性没有保证,任何一个副本活过来就可以继续工作,但是有可能存在数据不一致的情况

转载于:https://my.oschina.net/u/3049601/blog/1831935

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值