CodeWalk

Kafka ISR机制与Leader选举

作者:苦行僧 · 2026-05-30 12:55

请解释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. 选举流程:

  1. Controller收到ZooKeeper通知(Leader节点session过期)
  2. Controller从ISR列表中选择第一个副本作为新Leader
  3. 如果ISR为空(不可用),则启用unclean.leader.election.enable
    • true:非ISR的副本中选举(可能丢数据,但保证可用性)
    • false(默认): 分区不可用(保证数据一致性)
  4. 新Leader更新ZooKeeper中的Leader信息
  5. 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之前的数据