1 Kafka核心总控制器Controller

  kafka的所有Broker都会注册到kafka集群中去。

  kafka集群会选举一个Broker作为kafka七群的总控制器Controller。

  他负责管理整个集群所有分区Partition和副本follower的状态

  controller的主要作用

    

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列表得副本数据不是很全得所以需要谨慎使用。