потоки kafka - присоединение к разделенным темам - PullRequest
0 голосов
/ 01 августа 2020

Насколько я понимаю, потоки kafka поддерживают разделение. Мне интересно, как это работает при объединении данных из двух разных тем? Я предполагаю, что для объединения данных на основе двух разных тем клиентское приложение должно каким-то образом гарантировать, что сообщения, которые оно получает из обеих тем, имеют один и тот же ключ. Просто интересно, как это делают потоки kafka?

1 Ответ

2 голосов
/ 02 августа 2020

Есть несколько предварительных требований, чтобы иметь возможность выполнять соединения поток-поток, ktable-ktable или stream-ktable;

  • Темы должны быть совместно разделены. Это означает, что у них должно быть одинаковое количество разделов. На самом деле это сложный реквизит, и API потоков не позволит объединяться, если темы не разделены совместно, и будет выдавать TopologyBuilderException во время выполнения, когда разделы собираются назначить.

Кроме этого Требование: любое соединение будет работать, но для правильной работы необходимо выполнить ряд дополнительных требований, например:

  • Обе темы должны использовать одну и ту же схему ключей. Например, если один topi c использует userName в качестве ключа, а другая операция соединения userSurname будет работать, но, скорее всего, не даст никакого значимого вывода.
  • Приложения-источники, которые пишут в объединенные темы, должны использовать ту же стратегию разделения . Таким образом, одни и те же ключи окажутся в тех же разделах, которые назначены для объединения.
  • Обе темы должны использовать одну и ту же стратегию отметки времени сообщения (logAppendTime или CreteTime). Это не является обязательным требованием, но должно рассматриваться для оконных объединений, если в темах используются разные типы messageTimeStampTypes, поскольку messageTimeStamp используются для определения соответствующих сообщений, которые необходимо объединить, и отсутствие этого может привести к трудностям поиска ошибок.

Объединения GlobalKTable не имеют никаких из этих требований и будут работать с каждым топом c независимо от количества разделов, стратегии разделения vs, потому что все данные для globalKTable будут представлены каждому экземпляру потоков.

Когда сообщения создаются, они будут отправлены в разделы на основе их ключа и стратегии разделения, API потоков назначает разделы с одинаковыми темами из каждого topi c одному и тому же процессору, чтобы все соответствующие сообщения от одного topi c с одинаковым ключом обрабатывались в тот же процессор. Для оконных соединений считается, что временные метки сообщений позволяют найти сообщения, которые нужно присоединить для этого конкретного окна, и выдают результат после того, как соединение будет выполнено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...