Kafka 连接 consumer_group 中的最大活动任务

Kafka connect maximum active tasks in the consumer_group

我有一个消耗 2 个主题的连接器

1 个主题有 6 个分区,第二个主题有 2 个分区(总共使用 8 个分区)

当我将 tasks.max 设置为低于 6 时,要使用的分区在任务之间得到很好的平衡(通过查看 consumer_group)

但是如果我将 tasks.max 设置为高于 6 ,例如 8 ,那么我在 consumer_group 中有两个没有主题属性的任务(所有 8 个任务都在 运行 state ), 所以有 2 个空闲任务

主题offset.storage.topic只有6个分区

连接器不可能有比主题的分区数更多的活动(不仅运行)任务offset.storage.topic ?

值 offset.storage.partitions 与最大活动连接器任务相关吗?

the confluent doc say ->

offset.storage.topic :

topic with a large number of partitions (e.g., 25 or 50, just like Kafka’s built-in __consumer_offsets topic) to support large Kafka Connect clusters.

tasks.max 配置来自框架并指定要为连接器创建的最大任务数。但是,可能会创建更少的任务。 - https://docs.confluent.io/current/connect/managing/configuring.html

在这种情况下,框架决定它只需要 # 个任务来处理负载,因此每个任务处理相关的主题分区。这从框架的角度来看很好,因为没有违反每个分区的有序保证。

如果您对自己的负载模式了解更多,并且想为每个主题分区明确设置 1 个独特的任务,您可以尝试将配置分解为单独的配置,每个主题一个,每个都有 tasks.max 的相关分区数


offset.storage.partitions related to max active connector task ?

-- 不,他们没有关系。 您应该将其设置为 25(默认)或更多...最好不要触摸它...

在 kafka-connect 2.7 中

接收器连接器的最大活动任务数等于要消耗的最大分区数的主题

因为它使用的是 RangeAssignor 分区分配策略

(与主题分区数无关offset.storage.partitions)

活动任务是在接收器连接器的消费者组中具有分区属性的任务

示例:

有 2 个主题,每个主题有 10 个分区

活动任务的最大数量为10(如果我将task.max设置为12,则消费者组中的2个任务没有分区可消费)。

如果我将具有 15 个分区的第三个主题添加到连接器 conf,那么 12 个任务将接收要使用的分区,然后如果我现在将 task.max 设置为 17,则只有 15 个任务在消费者组中处于活动状态.


我发现强制在消费者组的所有成员之间平均分配分区的唯一方法是设置

"consumer.override.partition.assignment.strategy": "org.apache.kafka.clients.consumer.RoundRobinAssignor"