在Kafka的一个分区(partition)中,Leader的选择主要依赖于Zookeeper:
1. 通过Zookeeper存储replicas
Kafka会将每个partition的replicas(复制副本brokers)信息存储在Zookeeper中。
2. Zookeeper选举Leader
当partition的Leader broker 离线或者失效时,ZooKeeper会自动在replicas列表里选举一个新的Leader。
3. Prefer broker with mostlog caches
Zookeeper倾向于选择那些有最多立即可用写入缓存的broker作为Leader。
4. 轮询选择
如果有多个broker的log cache一样多,Zookeeper则会轮询选择一个作为Leader。
5. 投票选择
在配置中也可以指定以投票的方式选择partition的Leader。
6. 设置优先级
可以设置不同优先级的broker,优先级高的更易当选Leader。
Kafka上的分区选择Leader主要途径是:
- 通过ZooKeeper存储replicas信息
- ZooKeeper根据replicas列表选择
- 倾向选择log cache多的broker
- 按照轮询或者投票机制选择
- 按优先级设置权重选择
Zookeeper可以动态监控brokers的状况,并及时自动选择具备条件(如log cache多)的Broker作为Leader。
Kafka依赖Zookeeper存储replicas信息和进行Leader选举。主要机制是根据log cache多、轮询选择、按优先级选择。