环境说明:
1、1个zookeeper,3个kafka broker在同一主机。
1、创建一个test topic(3分区、3副本)
kafka-topics.bat --create --zookeeper localhost:2181/kafka --replication-factor 3 --partitions 3 --topic test
分区情况如下:
kafka-topics.bat --describe --zookeeper localhost:2181/kafka --topic test
2、生产1个消息
kafka-console-producer.bat --broker-list localhost:9092,localhost:9093,localhost:9094 --topic test
3、broker0宕机和查看分区分配情况
broker0宕机后 ,分区leader会重新选举,整个集群仍处于可用状态。
4、继续生产5个消息
kafka-console-producer.bat --broker-list localhost:9092,localhost:9093,localhost:9094 --topic test
5、broker0恢复和查看分区分配情况
可以看出,broker0恢复后,会重新加入到ISR中,但partition leader所在broker未发生改变,出现了partition leader分布不均匀情况。
6、首选的副本选举
由于目前leader分布不均匀,故运行首选的副本选举命令。
kafka-preferred-replica-election.bat --zookeeper localhost:2181/kafka
会发现3个partition leader被重新分配回最初的broker上。这是因为Replicas数据一致未变过,此脚本默认会选举Replicas数据中的第一个为partition leader broker。