Kafka不同ack配置生产者场景下副本Leader选举相关问题
Kafka集群Leader选举问题解答
核心结论
broker 99 不可能被选举为新Leader,t6时刻ack=1的生产者也无法收到消息确认。
无法当选Leader的机制说明
- 首先集群配置了
unclean.leader.election=false,该配置明确要求Kafka只能从当前分区的*ISR(同步副本集合)*中选举新Leader,不允许非ISR中的副本参与Leader选举,避免消息丢失。 - 结合时序推导t4时刻的ISR状态:
ack=all的生产者在t3收到消息确认,说明offset=12的消息已经同步到所有当前ISR中的副本,且集群配置min.insync.replicas=2,说明此时ISR包含97、98两个节点。- 此时broker
99尚未同步到offset=12的消息,已经被判定为不同步副本,被踢出了ISR列表。
- t4时刻
97、98同时宕机后,剩下的99不在ISR列表中,不符合Leader选举资格,集群该分区会处于无Leader的不可用状态,无法处理生产者的写入请求。
与High Watermark(HW)的关系
该判定机制与HW无关:
Leader选举的合格性判断核心依据是副本是否在ISR列表中,ISR的维护是基于副本的LEO(日志末端偏移)与Leader的LEO差值是否超过阈值来判定的。HW的作用是标记所有ISR副本都已同步的最大偏移,仅用于控制消费者可见的消息范围,不直接参与Leader选举资格判定。
内容的提问来源于stack exchange,提问作者Paweł Szymczyk
相关产品推荐
相关产品推荐

