Kafka Connect 连接器限制为每个主题一个接收器任务

Kafka Connect connector limiting to one sink task per topic

我是 运行 Kafka Connect 集群(本地有 1 个工作人员 Docker Compose),带有我自己的自定义 Sink 插件。我有几个主题想在连接器中使用:topicA, topicB, topicC,每个主题都有一个分区。

连接器启动时的部分配置如下:

...
"topics": "topicA,topicB,topicC",
"tasks.max": 3,
...

使用此配置,我希望 Kafka Connect 为每个接收器任务分配一个主题,但这不是我所看到的。在实践中发生的是 SinkTask::open 为每个分配了所有主题的任务调用。每个接收器任务也看到来自多个主题的记录,而不仅仅是一个。我可以确认所有任务都表示为 运行.

除了上述配置之外,我还需要启用什么才能使 Kafka Connect 将一个接收器任务准确映射到一个主题?是否只有一个工作人员和 Kafka Connect 没有将任务分解为同一个工作人员的不同线程?

根据我的经验,完成您要求的唯一方法是创建 3 个不同的连接器,只有一个主题。

更具体地说,提供列表或主题模式将简单地订阅整个列表可用的任何消费者。

我个人还没有找到任何方法来准确控制任务如何重新平衡或分配给主题或其分区。您可以在 Connect 中修改消费者客户端设置,但这只能在分配任务后进行。

我最终创造性地使用了 SinkTaskContext 的 pause()resume() 方法。 Kafka Connect 将在消费者订阅的 topic-partitions 上方便地调用 open(...),在该挂钩中是暂停您不感兴趣的主题的好机会。

https://kafka.apache.org/26/javadoc/org/apache/kafka/connect/sink/SinkTaskContext.html