我对客户端关注的partition.assignment.strategy
分区分配以及Kafka负责哪个部分感到困惑。
例如,假设我有一个带有100个分区的kafka主题。
如果我制作一个运行5个消费者线程的应用,并使用partition.assignment.strategy
的RangeAssignor,那么我应该让5个消费者使用25个分区。
现在,如果我通过部署4次并使用相同的使用者组来扩展此应用程序,则可以。 kafka会首先在其侧面将25个分区划分为每个应用程序,然后才使用PartitionStrategy将这25个分区进一步划分为应用程序吗?
这将完美地产生4个应用程序,每个应用程序有5个使用者,每个应用程序消耗5个分区。
答案 0 :(得分:0)
从每个消费者使用20个分区开始。当进行扩展时,最终有4 x 5个消费者,最终将有20个消费者,每个消费者都从5个分区中消费。
Kafka只看到消费者,它不在乎他们来自哪个应用程序
答案 1 :(得分:0)
作为组管理的一部分,使用者将跟踪属于特定组的使用者列表,并在触发以下任何事件时触发重新平衡操作:
新成员将添加到消费者组。
最有可能的点号4是您的情况,所使用的策略将相同(partition.assignment.strategy)。如果您明确指定了使用者要使用的分区
,则这并不适用答案 2 :(得分:-1)
Java文档中充分记录了默认分配器的行为。
RangeAssignor是默认的Assignor,请参见其Javadoc以获取其生成的分配示例:http://kafka.apache.org/21/javadoc/org/apache/kafka/clients/consumer/RangeAssignor.html
如果您有20个使用RangeAssignor的使用者正在使用具有100个分区的主题,则将为每个使用者分配5个分区。
因为RangeAssignor按主题分配分区,所以如果您的主题只有很少的分区,那么它可以创建真正不平衡的分配。在这种情况下,RoundRobinAssignor会更好地工作