【问题标题】:How to load balance the Kafka Leadership?如何对 Kafka 领导层进行负载均衡?
【发布时间】:2014-12-16 09:05:51
【问题描述】:

我的卡夫卡版本是kafka_2.9.2-0.8.1.1。我在集群中有两个代理,4 个主题,每个主题有 4 个分区。

当我跑步时

sh kafka-topics.sh --describe --zookeeper rhost:2181

对于所有主题/分区,我将代理 1 视为领导者。

如何对领导者进行负载均衡?

例如,对于主题 1 和主题 2,将代理 1 作为领导者,并且 对于主题 3 和主题 4,将代理 2 作为领导者。

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

    我知道这有点晚了,也许你已经有了答案,但为了平衡领导者,首先你需要让所有分区之间的经纪人同等优先,经纪人成为“首选领导者”有两个标准,首先,它必须是同步副本,其次,它必须是副本列表中的第一个元素。因此,如果您有足够数量的主题/分区,您可以手动执行此操作,这会更容易,否则您需要重新分配分区,在所有代理之间分配第一个元素(首选副本),然后启动首选领导者选举确保首选领导者实际上是领导者的工具。

    【讨论】:

      【解决方案2】:

      分区应该自动重新平衡,因为代理配置参数auto.leader.rebalance.enable 的默认值为true。 (见documentation

      但是,默认情况下,此重新平衡每 5 分钟发生一次,由 leader.imbalance.check.interval.seconds 参数定义。如果您希望这种情况更频繁地发生,则必须修改此参数。

      【讨论】:

        【解决方案3】:

        您可以使用Preferred Replica Leader Election Tool:

        sh kafka-preferred-replica-election.sh --zookeeper zklist

        这保证了集群中代理之间的领导负载是均匀平衡的。

        【讨论】:

          【解决方案4】:

          经纪人有一个属性,可以在server.properties 文件中设置,这将启用领导的自动重新平衡。默认情况下,它未启用。将以下代码行添加到每个代理并重新启动 kafka。

          auto.leader.rebalance.enable=true

          【讨论】:

          • ,我已启用此“auto.leader.rebalance.enable=true”,但它不起作用。使用带有 brokerId 0 和 1 的 2 kafka。如果 broker 0 停止,则 broker 1 不充当负载我得到的balance.Error是“java.net.ConnectException:连接被拒绝”
          • 根据当前文档,auto.leader.rebalance.enable 值默认为 true,而不是 false
          • 只有 v0.8 建议将其设置为 true,0.10 及更高版本默认设置为 true。请参阅 v0.8 文档中的平衡领导力:kafka.apache.org/081/documentation.html 无论哪种方式,当您描述一个主题时:领导者“X”和列表中的第一个副本 (Y, Z, X) 具有首选副本顺序的所有分区应该相同对于正确的领导者选举,有时这可能会丢失,有时,同一节点可能是许多分区的领导者 - 即,ISR 中的领导者也可能不平衡。您始终可以运行首选副本选举脚本来解决此问题。
          猜你喜欢
          • 1970-01-01
          • 2017-01-20
          • 1970-01-01
          • 2020-05-26
          • 1970-01-01
          • 2021-03-17
          • 1970-01-01
          • 1970-01-01
          • 2021-12-07
          相关资源
          最近更新 更多