首页 > 解决方案 > kafka-preferred-replica-election.sh 和 auto.leader.rebalance.enable 有什么区别?

问题描述

重新启动代理后,我发现一个主题的领导者中的所有分区都在代理3中,我设置了 imbalance.check.interval.seconds300,auto.leader.rebalance.enableTrue但是300秒后没有任何反应。

因此bin/kafka-preferred-replica-election.sh,我使用 并得到了我的预期,领导者被平衡为经纪人 1、2、3。

我想知道为什么没有发生自动重新平衡?kafka-preferred-replica-election.sh和有什么区别auto.leader.rebalance.enable

控制器日志:

[2019-08-14 09:31:33,454] INFO [Controller id = 3] 处理自动首选副本领导者选举 (kafka.controller.KafkaController) [2019-08-14 09:31:33,454] TRACE [Controller id = 3 ] 检查需要触发自动领导平衡(kafka.controller.KafkaController)[2019-08-14 09:31:33,455] 调试 [控制器 id = 3] 代理首选副本 Map(2 -> Map(__consumer_offsets-22 ->向量(2),__consumer_offsets-4 -> 向量(2),__consumer_offsets-7 -> 向量(2),__consumer_offsets-46 -> 向量(2),__consumer_offsets-25 -> 向量(2),__consumer_offsets-49 ->矢量(2),__consumer_offsets-16 -> 矢量(2),__consumer_offsets-28 -> 矢量(2),__consumer_offsets-31 -> 矢量(2),__consumer_offsets-37 -> 矢量(2),__consumer_offsets-19 ->向量(2),__consumer_offsets-13 -> 向量(2),第四个主题-1 -> 向量(2, 3, 1), __consumer_offsets-43 -> 向量(2), __consumer_offsets-1 -> 向量(2), __consumer_offsets-34 -> 向量(2), __consumer_offsets-10 -> 向量(2), __consumer_offsets-40 -> Vector(2)), 1 -> Map(__consumer_offsets-30 -> Vector(1), __consumer_offsets-21 -> Vector(1), __consumer_offsets-27 -> Vector(1), __consumer_offsets-9 -> Vector(1), __consumer_offsets-33 -> Vector(1), __consumer_offsets-36 -> Vector(1), __consumer_offsets-42 -> Vector(1), __consumer_offsets-3 -> Vector(1), __consumer_offsets-18 -> Vector(1), __consumer_offsets-15 -> Vector(1), __consumer_offsets-24 -> Vector(1), __consumer_offsets-48 -> Vector(1), __consumer_offsets-6 -> Vector(1),第四个主题-0 -> 向量(1, 2, 3), __consumer_offsets-0 -> 向量(1), __consumer_offsets-39 ->向量(1), __consumer_offsets-12 -> 向量(1), __consumer_offsets-45 -> 向量(1)), 3 -> 映射(__consumer_offsets-8 -> 向量(3), __consumer_offsets-35 -> 向量(3) , __consumer_offsets-41 -> Vector(3), __consumer_offsets-23 -> Vector(3), __consumer_offsets-47 -> Vector(3), Fourth_topic-2 -> Vector(3, 1, 2), __consumer_offsets-38 ->向量(3),__consumer_offsets-17 -> 向量(3),__consumer_offsets-11 -> 向量(3),__consumer_offsets-2 -> 向量(3),__consumer_offsets-14 -> 向量(3),__consumer_offsets-20 ->矢量(3),__consumer_offsets-44 -> 矢量(3),__consumer_offsets-5 -> 矢量(3),__consumer_offsets-26 -> 矢量(3),__consumer_offsets-29 -> 矢量(3),__consumer_offsets-32 -> Vector(3))) (kafka.controller.KafkaController) [2019-08-14 09:31:33,455]调试[控制器ID = 3]主题不在代理2映射的首选副本中(fourth_topic-1 -> Vector(2,3,1))(kafka.controller.KafkaController)[2019-08-14 09:31: 33,455] 调试 [控制器 ID = 3] 主题不在代理 2 映射的首选副本中(fourth_topic-1 -> Vector(2, 3, 1))(kafka.controller.KafkaController)[2019-08-14 09:31: 33,456] TRACE [控制器 id = 3] 代理 2 的领导者不平衡率为 0.05555555555555555 (kafka.controller.KafkaController) [2019-08-14 09:31:33,456] 调试 [控制器 id = 3] 主题不在代理的首选副本中1 Map(fourth_topic-0 -> Vector(1, 2, 3)) (kafka.controller.KafkaController) [2019-08-14 09:31:33,456] TRACE [Controller id=3] 代理 1 的领导者不平衡率是0.05555555555555555 (kafka.controller.KafkaController) [2019-08-14 09:31:33,456]调试[控制器ID = 3]主题不在代理3 Map()的首选副本中(kafka.controller.KafkaController)[2019-08-14 09:31:33,456]跟踪[控制器ID = 3]领导者不平衡比率代理 3 为 0.0 (kafka.controller.KafkaController)

但是fourth_topic的partition的leader仍然在broker 3中:

bin/kafka-topics.sh --zookeeper 10.xx.xx.xx:2181/kafka  --topic fourth_topic --describe
Topic:fourth_topic      PartitionCount:3        ReplicationFactor:3     Configs:
        Topic: fourth_topic     Partition: 0    Leader: 3       Replicas: 1,2,3 Isr: 3,1,2
        Topic: fourth_topic     Partition: 1    Leader: 3       Replicas: 2,3,1 Isr: 3,1,2
        Topic: fourth_topic     Partition: 2    Leader: 3       Replicas: 3,1,2 Isr: 3,1,2

标签: apache-kafka

解决方案


运行时kafka-preferred-replica-election.sh,它会强制为所有分区选择首选副本。

另一方面,当您设置auto.leader.rebalance.enable为 true 时,Controller 会定期检查不平衡情况(每个leader.imbalance.check.interval.seconds)。leader.imbalance.per.broker.percentage但是,为了避免集群上不必要的负载,只有当不平衡率高于默认值 10%时,领导者才会自动重新平衡。

您可以在控制器日志中看到当前的不平衡率(默认情况下:${kafka.logs.dir}/controller.log)。


推荐阅读