Потоки Кафки: присоединяйтесь на время приема пищи - PullRequest
1 голос
/ 03 апреля 2020

У меня есть две темы довольно разного объема (может быть что-то вроде 1000 событий, отправленных в левой топи c для каждого события в правой топи c).

Я пытаюсь leftJoin эти две темы вместе, и у меня сложилось впечатление, что окно соединения вычисляется по времени обработки, а не по времени приема, в результате чего меньший поток слишком быстро «заканчивается».

Возможно ли указать временную семантику соединения потокового потока со временем приема (или временем события)?

Я могу понять, почему не так просто использовать время приема, но это кажется необходимостью при обработке исторических потоков .

1 Ответ

2 голосов
/ 04 апреля 2020

Соединение Kafka Streams основано на времени события, т. Е. Все, что возвращает TimestampExtractor (по умолчанию отметка времени сообщения хранится в topi c), и вы не можете изменить ее (вы можете использовать только другой экстрактор отметки времени для косвенно изменить результат).

Обратите внимание, что соединение выполняется «с нетерпением», и, таким образом, для всех левых записей поиск в правом потоке выполняется немедленно, что может привести к дополнительным <key, (left-value,null)> результаты.

Это также зависит от порядка обработки, который наилучшим образом основан на времени события. Гарантии получили улучшение в выпуске 2.3, и использование параметра конфигурации max.task.idle.ms может помочь смягчить проблему.

В среднесрочной перспективе улучшено поведение левого и внешнего соединения, чтобы избежать этих дополнительных записи результатов. Поскольку Kafka является проектом с открытым исходным кодом, и вы хотели бы получить его, пожалуйста, помогите исправить это раньше:)

Единственной другой альтернативой будет реализация пользовательского оператора соединения через Processor API.

...