谁来实施
- 分区leader副本的选举由
Kafka Controller
负责具体实施。
选举时间
- leader挂掉时
- broker挂掉时,然后broker上可能有某些leader
选举资格
Kafka在Zookeeper中为每一个partition动态的维护了一个ISR
,这个ISR里的所有replica都跟上了leader,只有ISR
里的成员才能有被选为leader的可能(unclean.leader.election.enable=false
)
如果ISR为空怎么办?
在ISR中至少有一个follower时,Kafka可以确保已经commit的数据不丢失,但如果某一个partition的所有replica都挂了,就无法保证数据不丢失了。这种情况下有两种可行的方案:
等待ISR中任意一个replica“活”过来,并且选它作为leader
选择第一个“活”过来的replica(并不一定是在ISR中)作为leader
如果一定要等待ISR中的replica“活”过来,那不可用的时间就可能会相对较长。而且如果ISR中所有的replica都无法“活”过来了,或者数据丢失了,这个partition将永远不可用。选择第一个“活”过来的replica作为leader,而这个replica不是ISR中的replica,那即使它并不保障已经包含了所有已commit的消息,它也会成为leader而作为consumer的数据源。默认情况下,Kafka采用第二种策略,即unclean.leader.election.enable=true,也可以将此参数设置为false来启用第一种策略。
unclean.leader.election.enable这个参数对于leader的选举、系统的可用性以及数据的可靠性都有至关重要的影响
选举流程
没找到相关资料
总结
简而言之,就是从ISR中选leader,如果ISR中一个都么有,那就从其他副本选