1 Kafka核心总控制器Controller
kafka的所有Broker都会注册到kafka集群中去。
kafka集群会选举一个Broker作为kafka七群的总控制器Controller。
他负责管理整个集群所有分区Partition和副本follower的状态
2 controller节点的选举
Controller选举机制是使用zookeeper的选举机制来实现
在zookeeper中的主节点下面创建一个 /controller 临时节点,zookeeper会保证有且仅有一个broker能创建成功,
这个broker就会成为集群的总控器controller,如下
Controller里面记录了当前的Controller是哪个节,如下
3 partion的leader的选举
Controller会用zookeeper的watcher机制,监控brokers下面的所有的broker
broker在加入集群时注册的节点是个临时节点,伴随broker的崩溃,临时节点消失,然后controller会收到通知
一旦发现某个broker挂掉了,就会去找到该broker有多少partion是leader并发起对该partition的选举。
对partition的leader重新选举的机制为:
1)监听topic相关的变化
2)为Zookeeper中的/brokers/topics节点添加TopicChangeListener,用来处理topic增减的变化
如下图, 对于每个Topic都有一个ISR列表,直接取ISR列表的第一个作为leader,如果当前挂的就是第一个,则选择后面一个作为leader。
unclean.leader.election.enable=false, 默认情况下, 是从IRS列表里面的节点作为leader,但是如果这个参数配置成true,不在ISR列表但是在Replicas列表里面的也可以作为选举leader的。
但是可以想像得出来,这个不在ISR列表得副本数据不是很全得所以需要谨慎使用。