Kafka的副本及ACK机制
先来几个名词解释
AR(Assigned Repllicas):分区中所有副本的统称
ISR(In-Sync Replicas):由所有与leader副本保持一定程度同步的副本(包括Leader)组成的集合
ISR集合是AR集合中的一个子集。在kafka中 消息会先发送到leader副本,然后follower副本才能从leader副本中拉取消息进行同步,同步期间内follower副本相对于leader副本而言会有一定程度的滞后。“一定程度”是指可以忍受的滞后范围,这个范围可以通过参数进行配置.在可以忍受的这个滞后范围内的follower副本 才算做ISR中的一员
【Kafka的副本及ACK机制】OSR(Out-Sync Relipcas):与leader副本同步滞后过多的副本 也可称之为失效副本
关系:AR=ISR+OSR
在正常情况下,所有的follower副本都应该与leader副本保持一定程度的同步,即AR=ISR,OSR集合为空。
Leader会维护一个动态的ISR。意为与leader保持同步的follower集合。
当ISR中的follower完成数据的同步之后 leader才会发送ask。
如果follower长时间未向leader同步数据,则该leader将其提出ISR 该时间阈值由'replica.lag.time.max.ms'参数来设定。
当leader发生故障时 会优先从ISR中选取新的leader
文章图片
kafka的ack机制 Kafka的ack机制:指的是producer的消息发送确认机制 通过request.required.acks参数来设置
这直接影响到Kafka集群的吞吐量和消息可靠性。而吞吐量和可靠性就像硬币的两面,两者不可兼得,只能平衡。
1(默认):producer在ISR中的leader已成功收到数据并得到确认。(leader写完即代表接收成功)
最低的延迟,但是最弱的持久性。
如果leader刚刚接收到消息,follwer还没来得及同步过去,结果leader所在的broker宕机了,此时也会导致这条消息丢失。
0:producer无需等待来自broker的确认而继续发送下一批消息。(只管发 不管leader是否接收到)
这种情况下数据传输效率最高,但是数据可靠性确是最低的。
可能你发送出去的消息还在半路,leader所在broker就直接挂了,但是你的客户端还是认为消息发送成功,此时就会导致这条消息丢失。
-1(all):producer需要等待ISR中的所有follower都确认接收到数据后才算一次发送完成
持久性最好,延时性最差,可靠性最高。
但是当ISR中只有leader时 这样就变成了acks=1的情况。也会丢失数据
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量