【问题标题】:Uneven partition assignment in kafka streamskafka流中的不均匀分区分配
【发布时间】:2021-11-29 06:02:24
【问题描述】:

我在使用 Kafka Streams 时遇到了奇怪的分配行为。我有 Kafka 流的 3 节点集群。我的流非常简单,一个源主题(24 个分区,所有 kafka 代理都在其他机器上运行,而不是 kafka 流节点),我们的流图只接受消息,按键分组,执行一些过滤并将所有内容存储到接收主题。一切都在每个节点上使用 2 个 Kafka 线程运行。

但是,每当我对我的 kafka 流进行滚动更新(通过始终仅关闭一个应用程序以便其他两个节点正在运行)时,我的 kafka 流以每个“节点”(通常为 16-9-0)的分区数奇数结束.只有在我重新启动 node01 时,有时 node02 集群才会恢复到更均匀的状态。

有人可以建议我如何在额外重启之前实现更平等的分配吗?

【问题讨论】:

    标签: apache-kafka streaming apache-kafka-streams


    【解决方案1】:

    我假设运行 kafka 流应用程序的两个节点具有相同的组 ID 以供消费。

    我建议您检查一下您的消费者使用的分区分配策略是否不是org.apache.kafka.clients.consumer.RangeAssignor

    如果是这种情况,请将其配置为org.apache.kafka.clients.consumer.RoundRobinAssignor。这样,当 group coordinator 收到 JoinGroup 请求并将分区移交给 group leader 时,group leader 将确保节点之间的分布不均匀超过 1。

    除非您使用的是旧版本的 Kafka 流,否则默认为 Range,并且不保证在消费者之间传播。

    【讨论】:

    • 感谢您的回答。我正在使用 Kafka 2.6。我检查了代码,kafka 流没有使用任何这些分配器,而是使用 StreamsPartitionAssignor
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    相关资源
    最近更新 更多