让一个broker死而复活,验证它原本领导的分区在它回到ISR之后leader是否会自动切回来,再用kafka-leader-election.sh手动触发preferred election,看这条命令真实修正了多大范围。
命令 · shell $ kill -9 <broker1的pid> $ sleep 8 # 真实等故障转移完成 $ kafka-server-start.sh node1/server.properties & # 真实重启broker1 $ sleep 10 # 真实等它追上ISR $ kafka-topics.sh --describe --topic leader-demo
Partition 0 Leader: 2 Replicas: 1,2,3 Isr: 1,2,3 ← broker1已回到Isr,但leader还是2 Partition 3 Leader: 3 Replicas: 1,3,2 Isr: 1,2,3 ← 同样,leader还是3
Replicas列表里排在第一位的1真实早就回到了ISR,具备了当leader的资格,但真实的leader依然是故障转移时接手的broker——Kafka不会因为原来的首选副本活过来了,就自动把leader还给它,这真实需要一次显式的操作。
命令 · shell $ kafka-leader-election.sh --bootstrap-server localhost:19092 \ --election-type preferred --all-topic-partitions
Successfully completed leader election (PREFERRED) for partitions post-kill-new-topic-0, leader-demo-0, leader-demo-3, tx-demo-0, after-join-topic-1, semantics-demo-0, after-join-topic-0, order-demo-1
真实一次性修正了8个分区,横跨6个不同的topic——这些真实都是本系列前面各篇实验里,因为反复kill broker做故障演练而真实积累下来的leader不均衡。--all-topic-partitions真实的意思是扫描集群里的每一个分区,只要它当前的leader不是Replicas列表里排第一的那个,就真实对它做一次preferred leader election。
每一步都是本文上面真实执行kafka-leader-election.sh前后跑出来的原始结果。