Kafka Connect Distributed tasks.max 配置设置的理想值?

Ideal value for Kafka Connect Distributed tasks.max configuration setting?

我希望生产和部署我的 Kafka Connect 应用程序。但是,我有两个关于 tasks.max 设置的问题,这是必需的并且非常重要,但对于实际将此值设置为什么的细节是模糊的。

如果我有一个包含 n 个分区的主题,我希望从中使用数据并写入某个接收器(在我的例子中,我正在写入 S3),我应该将 tasks.max 设置为什么?我应该把它设置为n吗?我应该将它设置为 2n 吗?直觉上我似乎想将值设置为 n,这就是我一直在做的事情。

如果我更改我的 Kafka 主题并增加该主题的分区会怎样?如果我将它设置为 n,我将不得不暂停我的 Kafka 连接器并增加 tasks.max?如果我将值设置为 2n,那么我的连接器应该会自动增加它运行的并行度?

在 Kafka Connect 接收器中,任务本质上是消费者线程并接收要读取的分区。如果您有 10 个分区并将 tasks.max 设置为 5,则每个任务将接收 2 个分区以读取和跟踪偏移量。如果您已将 tasks.max 配置为高于分区计数的数字,Connect 将启动与其正在读取的主题的分区数相等的任务数。

如果您更改主题的分区数,则必须重新启动连接任务,如果 tasks.max 仍然大于分区数,连接将启动那么多任务。

编辑,刚刚发现 ConnectorContexthttps://kafka.apache.org/0100/javadoc/org/apache/kafka/connect/connector/ConnectorContext.html

必须编写连接器以包含此内容,但如果主题发生更改(分区 added/removed),Connect 似乎能够重新配置连接器。

我们在 Kafka-Connect(5.1.2) 实例之间分配工作负载时遇到问题,原因是 tasks.max 的数量多于分区的数量。

在我们的例子中,有 10 个 Kafka Connect 任务和 3 个要使用的主题分区。这 10 个工作人员中的 3 个被分配到主题的 3 个分区,另外 7 个没有分配到任何分区(这是预期的),但 Kafka Connect 平均分配任务,没有考虑他们的工作量。所以我们最终将任务分配给我们的实例,其中一些实例处于空闲状态(因为它们没有分配给任何不空的工作人员)或者一些实例比其他实例工作得更多。

为了解决这个问题,我们将 tasks.max 设置为等于我们主题的分区数。

看到Kafka Connect在重平衡时不考虑任务的分配,真是出乎我们的意料。另外,我找不到 tasks.max 设置的任何文档。