一、概述
kafka中有多个broker,kafka会在所有broker中选出一个controller。controller负责管理整个集群中的分区和副本的状态,其中Partition的Leader选举也是由controller决定。controller会将Leader的改变直接通过RPC的方式通知需为此作出响应的Broker
二、Kafka集群的Leader选举原理
Kafka的Leader选举是通过在zookeeper上创建/controller临时节点来实现leader选举,通过先到先得得原则决定。
所有参与选举的broker在该节点中写入当前broker的信息 ,由于一个节点只能被一个客户端创建成功,创建成功的broker即为leader(controller)。
由于临时节点如果客户端和服务端断开的话,临时节点会被删除。所有当leader和zookeeper失去连接时,临时节点会删除,而其他broker会监听该节点的变化,当节点删除时,其他broker会收到事件通知,重新发起leader选举。
三、分区的leader选举
Kafka会将每个topic分为多个消息分区(partition),这样消息的处理也可以在多个服务器上并行,有利于提供消息处理效率。
同时为了确保高可用,每个分区都会有一定数量的副本(replica)。这样如果有部分服务器不可用,副本所在的服务器就会接替上来,保证应用的持续性。为了提高处理效率,消息的读写都是在固定的一个副本上完成。这个副本就是所谓的Leader,而其他副本则是Follower,Follower会定期地