29

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

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

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

4

2 回答 2

39

在 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

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

于 2017-02-03T18:20:21.583 回答
2

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

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

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

看到 Kafka Connect 在重新平衡时没有考虑任务的分配,真的让我们感到意外。另外,我找不到该tasks.max设置的任何文档。

于 2019-10-08T14:23:09.817 回答