Идеальное значение для настройки конфигурации распределенных задач Kafka Connect?

Я ищу продукт для ионизации и развертывания приложения Kafka Connect. Тем не менее, есть два вопроса, которые у меня есть о задаче task.max, который требуется и имеет большое значение, но детали неясны в отношении того, на что действительно нужно установить это значение.

Мой самый простой вопрос заключается в следующем: если у меня есть тема с n разделами, в которых я хочу потреблять данные и записывать их в какой-нибудь приемник (в моем случае я пишу на S3), для чего мне следует установить tasks.max? Должен ли я установить его на n? Должен ли я установить его на 2n? Интуитивно кажется, что я хочу установить значение n и то, что я делаю.

Что, если я изменю тему Kafka и увеличу разделы по теме? Мне нужно будет приостановить мой Kafka Connector и увеличить task.max, если я установил его на n? Если я установил значение 2n, то мой соединитель должен автоматически увеличить параллелизм, который он работает?

Спасибо за вашу помощь!

Ответы

Ответ 1

В приемнике Kafka Connect задачи - это, по сути, потребительские потоки и получают разделы для чтения. Если у вас есть 10 разделов и у них tasks.max 5, каждая задача получает 2 раздела для чтения и отслеживания смещений. Если вы сконфигурировали tasks.max на число, превышающее количество разделов, Connect Connect запустит ряд задач, равный разделам тем, которые он читает.

Если вы измените количество разделов в теме, вам придется перезапустить задачу подключения, если tasks.max все еще больше, чем количество разделов, Connect запустит множество задач.

редактировать, только что открыл ConnectorContext: https://kafka.apache.org/0100/javadoc/org/apache/kafka/connect/connector/ConnectorContext.html

Коннектор должен быть записан для включения этого, но похоже, что Connect имеет возможность перенастроить соединитель, если есть изменение темы (разделы добавлены/удалены).

Ответ 2

У нас была проблема с распределением рабочей нагрузки между экземплярами Kafka-Connect (5.1.2), вызванная большим количеством tasks.max, чем количеством разделов.

В нашем случае было 10 заданий Kafka Connect и 3 раздела темы, которые необходимо использовать. 3 из этих 10 работников назначены на 3 раздела темы, а остальные 7 не назначены ни на какие разделы (что ожидается), но Kafka Connect распределял задачи равномерно, без учета их рабочей нагрузки. Таким образом, мы закончили с распределением задач по нашим экземплярам, где некоторые экземпляры остаются без дела (потому что они не назначены ни одному безработному), или некоторые экземпляры работают больше, чем другие.

Чтобы решить проблему, мы устанавливаем tasks.max равным количеству разделов наших тем.

Для нас действительно неожиданно видеть, что Kafka Connect не учитывает назначения задач при перебалансировании. Также я не смог найти никакой документации по настройке tasks.max.