kafka是一个非常依赖于zk的组件,Kafka集群中会有很多broker,比如分布式集群中有3个broker。
而在多个broker中会选取一个作为controller leader这样的角色。controller leader负责管理集群的上下线。所有topic分区的副本分配以及,包括leader的选举等等。这样的工作都是controller leader来实现的。
可以说controller的工作是依赖于zk。
集群中有3个broker,上面有broker0-3,这三个broker在启动之后都会向zk中注册节点,就是根下的controller这个节点。这个节点类型是临时节点类型,谁先注册上了,谁就是controller leader。
谁后注册的,发现这个节点已经被注册了,那么他们就会变为follower。
整个集群的管理工作是由leader来完成的。
broker1先注册节点,所以它当选为leader。
首先,所有的broker都会像zk ids下面注册序号节点,这个序号节点就是自己的broker id。每个broker启动之后都会去注册这样的临时节点。
Kafka的controller leader就会监听这样的节点,谁在就说明谁在线,如果在监听节点的过程中2没了,那说明2号的broker掉线了宕机了,所以它会监听到状态的变化。
2上可能有些分区,有些副本。有可能里面就有某个分区的副本的leader。那么就需要进行这个分区上的leader选举。这就是controller leader要干的事情。
如果leader挂了,broker1注册上了,在挂了之后0和2都是可以感知到的,因为都会监控controller这个节点的。当没有controller这个节点说明就挂了,于是他们再次去争抢这个节点,谁抢到谁就是新的leader。

说明broker3 为controller leader节点,如果3号挂掉之后,就会有新的controller leader出现,同时controller epoch会+1,这个代表controller leader发生了多少次变化。





