Kafka分区策略+水平缩放

时间:2018-12-19 09:00:55

标签: apache-kafka

我对客户端关注的partition.assignment.strategy分区分配以及Kafka负责哪个部分感到困惑。

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

如果我制作一个运行5个消费者线程的应用,并使用partition.assignment.strategy的RangeAssignor,那么我应该让5个消费者使用25个分区。

现在,如果我通过部署4次并使用相同的使用者组来扩展此应用程序,则可以。 kafka会首先在其侧面将25个分区划分为每个应用程序,然后才使用PartitionStrategy将这25个分区进一步划分为应用程序吗?

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

3 个答案:

答案 0 :(得分:0)

从每个消费者使用20个分区开始。当进行扩展时,最终有4 x 5个消费者,最终将有20个消费者,每个消费者都从5个分区中消费。

Kafka只看到消费者,它不在乎他们来自哪个应用程序

答案 1 :(得分:0)

作为组管理的一部分,使用者将跟踪属于特定组的使用者列表,并在触发以下任何事件时触发重新平衡操作:

  1. 任何已订阅主题的分区数更改
  2. 已创建或删除已订阅主题
  3. 使用者组的现有成员已关闭或失败。
  4.   

    新成员将添加到消费者组。

最有可能的点号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会更好地工作