kafka connect трансформации гарантии заказа - PullRequest
1 голос
/ 19 февраля 2020

Мы планируем использовать JMS Source Connector для потоковой передачи данных в наш кластер Kafka. Данные из ActiveMQ в формате XML. Соединитель источника JMS использует внутренний messageID (Message.getJMSMessageID ()) в качестве ключа.

Поле, которое служит ключом - в топике Kafka c, в которую потоковый соединитель - должен быть получен из в пределах (XML) полезной нагрузки.

Для этого необходимо выполнить несколько шагов в Соединителе.

  • Чтобы преобразовать XML во внутреннюю Структуру Соединения Кафки, которую мы используем пользовательский плагин преобразования (https://github.com/jcustenborder/kafka-connect-transform-xml)
  • Затем преобразователи ValueToKey и ExtractField устанавливают ключ, который был частью полезной нагрузки.
  • Теперь эта пара ключ-значение готов к отправке на нашу кафку топи c.

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

Первый вопрос: как работает параллелизм в сочетании с преобразователями одного сообщения? Создайте ли '(Source) Connector - Transformer - Converter' конвейер, который вместе распределяется установкой tasks.max , или параметр tasks.max каким-либо образом применяется только к Connector ?

Последнее кажется немного странным, поэтому если предположить, что первое правильно, у меня есть еще одно сомнение.

Наша клавиша Kafka topi c - которая гарантирует заказ на топике Kafka c - определяется в рамках задач Коннектора. При выборе tasks.max > 1 входящие сообщения распределяются между запущенными заданиями.

При распределении по нескольким задачам поступают два (или более) сообщения (содержащих один и тот же ключ в полезной нагрузке) в определенном порядке из ActiveMQ и может быть отправлен в различные задачи Kafka Connect.

Теоретически порядок может быть обратным при окончательной потоковой передаче в топику Kafka c (в том же разделе, поскольку они теперь имеют одинаковые ключ).

Прав ли я, рассуждая таким образом, и есть ли способ обойти это? Или гарантия заказа возможна только в этом случае использования только одной задачи.

1 Ответ

0 голосов
/ 19 февраля 2020

относится ли настройка tasks.max только к Соединителю?

Эта

Наша клавиша Kafka topi c - которая гарантирует заказ на кафку топи c

Нет, это не так. Он гарантирует только разбиение, и это все.

является гарантией заказа, возможной только в этом сценарии использования с использованием только одной задачи.

Это зависит от источника. Я не знаю AMQ, но если чтение сообщения удалит его из очереди, нет никакой вероятности, что несколько задач получат сообщение

...