首页 > 解决方案 > Kafka PartitionStrategy + 水平扩展

问题描述

我很困惑分区分配在多大程度上是客户端关注的问题partition.assignment.strategy,以及卡夫卡处理的部分。

例如,假设我有一个包含 100 个分区的 kafka 主题。

如果我制作 1 个运行 5 个消费者线程的应用程序,使用partition.assignment.strategyRangeAssignor,那么我应该得到 5 个消费者,每个消费者消耗 25 个分区。

现在,如果我通过部署它 4 次并使用相同的消费者组来扩展这个应用程序。kafka 会先将 25 个分区划分给它身边的每个这些应用程序,然后这 25 个分区才会被应用程序使用 PartitionStrategy 进一步细分吗?

这将整齐地产生 4 个应用程序,每个应用程序有 5 个使用者,每个消耗 5 个分区。

标签: apache-kafka

解决方案


默认分配器的行为在 Javadocs 中有详细记录。

RangeAssignor 是默认的分配器,请参阅它的 Javadoc,例如它生成的分配:http: //kafka.apache.org/21/javadoc/org/apache/kafka/clients/consumer/RangeAssignor.html

如果您有 20 个使用 RangeAssignor 的消费者从具有 100 个分区的主题消费,则每个消费者将被分配 5 个分区。

因为 RangeAssignor 是按主题分配分区的,所以如果您的主题分区很少,它可能会创建真正不平衡的分配。在这种情况下,RoundRobinAssignor效果更好


推荐阅读