【问题标题】:Kafka connect maximum active tasks in the consumer_groupKafka连接consumer_group中的最大活动任务
【发布时间】:2021-08-01 15:16:37
【问题描述】:

我有一个使用 2 个主题的连接器

1个topic有6个partition,第二个topic有2个partition(总共消费8个partition)

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

但是如果我将 tasks.max 设置为大于 6 ,例如 8 ,那么我在 consumer_group 中有两个没有主题归属的任务(所有 8 个任务都处于 RUNNING 状态),所以有 2 个空闲任务

主题offset.storage.topic只有6个partition

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

那么 offset.storage.partitions 的值是否与最大活动连接器任务相关?

the confluent doc say->

offset.storage.topic:

具有大量分区的主题(例如,25 或 50,就像 Kafka 内置的 __consumer_offsets 主题)支持大型 Kafka 连接集群。

【问题讨论】:

    标签: apache-kafka-connect


    【解决方案1】:

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

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

    如果您对负载模式有更多了解并希望为每个主题分区明确地拥有 1 个唯一任务,您可以尝试将配置分解为单独的配置,每个主题一个,每个主题都有相关数量的 tasks.max分区数


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

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

    【讨论】:

    • 感谢您的帮助,它给了我挖掘主题的动力,因为我真的认为它与 offset.storage.partitions 有关。我刚刚添加了一个答案,表明它与要消费的主题的分区数有关。
    • 如果答案对你有用,你至少应该 +1...
    【解决方案2】:

    在 kafka-connect 2.7 中

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

    (与主题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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-15
      • 2020-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-05
      • 2018-01-06
      • 2017-02-12
      相关资源
      最近更新 更多