《Apache Kafka 实战》笔记 - 7.5.1 preferred leader 选举

概念

  • preferred replica

假设我们为一个分区分配了3个副本,它们分别是 0、1、2,那么节点0就是该分区的 preferred replica,并且通常情况下是不会发生变更的,选择节点0的原因仅仅是它是副本列表中的第一个副本。

  • preferred leader 选举

把指定分区的leader调整回它们的 preferred replica 的过程。

为什么需要 preferred leader 选举

因为在 kafka 集群长时间运行中,broker 的宕机或崩溃是不可避免的,leader 就会发生转移,即使 broker 重新回来,也不会是 leader 了。在众多 leader 的转移过程中,就会产生 leader 不均衡现象,可能一小部分 broker 上有大量的 leader,影响了整个集群的性能,所以就需要把 leader 调整会最初的 broker 上,这就需要 preferred leader 选举。

实践

需要搭建一个3节点的集群环境,为了方便测试,可以搭建简单的单机集群(参考 https://www.jianshu.com/p/eaac847ca193)。

创建测试 topic:

bin/kafka-topics.sh --create --zookeeper localhost:2181 --partitions 3 --replication-factor 3 --topic test-topic03

查看 topic:

bin/kafka-topics.sh  --describe  --zookeeper localhost:2181 --topic test-topic03

由上面的输出可知,当前的3个分区的 leader 副本已经是它们的 preferred replica 了。

现在我们依次关闭 broker2 和 broker3 来模拟集群服务器崩溃的场景。这样做的目的是为了让所有分区的leader都变更到broker1上,从而造成集群leader分布不均匀的情况出现。

再次查看 topic:

bin/kafka-topics.sh  --describe  --zookeeper localhost:2181 --topic test-topic03

3个分区的leader现在都变成了broker1。

下面来调整它们的leader,先创建配置文件:

echo '{"partitions":[{"topic":"test-topic03","partition":0},{"topic":"test-topic03","partition":1}]}' > preferred-leader-plan.json

由于分区2的leader已经是 preferred replica 了,故真正需要调整的分区只有分区0和分区1。

重新启动 broker2、broker3,然后执行命令:

bin/kafka-preferred-replica-election.sh  --zookeeper localhost:2181  --path-to-json-file /preferred-leader-plan.json

输出信息:
Created preferred replica election path with test-topic03-0,test-topic03-1
Successfully started preferred replica election for partitions Set(test-topic03-0, test-topic03-1)

再次查看 topic:

bin/kafka-topics.sh  --describe  --zookeeper localhost:2181 --topic test-topic03

所有分区都已经调整成它们的preferred replica了。

你可能感兴趣的:(《Apache Kafka 实战》笔记 - 7.5.1 preferred leader 选举)