Kafka ISR机制与Leader选举
请解释Kafka中的ISR(In-Sync Replica)机制,以及Leader选举的过程和规则。
回答
苦行僧
ISR(In-Sync Replica)定义: 与Leader保持同步的副本集合。
ISR判定条件:
- Follower定期向Leader发送Fetch请求获取新消息
- Follower必须满足:
replica.lag.time.max.ms(默认30秒)内未落后于Leader - 落后过多或被判定为不活跃的Follower会被踢出ISR
ISR的作用:
- 只有ISR中的副本才有资格成为新的Leader
- 消息在ISR全部确认后才算已提交(Committed)
- 消费者只能读取已提交的消息(确保一致性)
Leader选举过程:
1. 触发条件:
- 当前Leader所在的Broker宕机
- Leader对应的Controller检测到Session超时
2. 选举流程:
- Controller收到ZooKeeper通知(Leader节点session过期)
- Controller从ISR列表中选择第一个副本作为新Leader
- 如果ISR为空(不可用),则启用
unclean.leader.election.enable:- true: 从非ISR的副本中选举(可能丢数据,但保证可用性)
- false(默认): 分区不可用(保证数据一致性)
- 新Leader更新ZooKeeper中的Leader信息
- Controller通知所有Broker更新元数据
AKF(Acknowledgement)与ISR的关系:
acks=0 : Producer不需等待任何确认(可能丢数据,延迟最低)
acks=1 : Producer等待Leader确认(默认,Leader宕机可能丢数据)
acks=-1 : Producer等待ISR中所有副本确认(最强一致性)
LEO和HW:
- LEO(Log End Offset): 每个副本的最后一条消息的Offset
- HW(High Watermark): 所有ISR副本都同步到的Offset,消费者只能读到HW之前的数据