Могут ли потоки Кафки эффективно объединяться с потоками? - PullRequest
0 голосов
/ 03 февраля 2019

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

Предположим, у нас есть два источника, s1 и s2, которые испускаютнекоторые сообщения по темам t1 и t2 соответственно.Теперь я хотел бы иметь приемник, который слушает обе темы, и я бы хотел, чтобы он обрабатывал кортежи сообщений <m1, m2> где m1.key == m2.key.

Если m1.key никогда не было найдено в каком-либо сообщениииз s2, то приемник полностью игнорирует m1.key (никогда не будет обрабатывать его).

Таким образом, приемник будет работать только с ключами, над которыми работали s1 и s2.

Некоторым традиционным и, возможно, наивным решением было бы иметь какой-то кеш или хранилище и работать с элементом, только когда оба сообщения находятся в кеше.

Я бы хотел знать, есть ли у Кафкипредлагает решение этой проблемы.

1 Ответ

0 голосов
/ 03 февраля 2019

Большинство современных потоковых процессоров, таких как Apache Flink , Kafka Streams или Spark Streaming , могут решить эту проблему для вас.Все трое протестированы потребителями Kafka для боевых действий, подобных этому.

Даже в этих средах существует несколько различных способов достижения потокового соединения, как описано выше.Например, в Flink можно использовать Table API , который имеет SQL-подобный синтаксис.

То, что я использовал в прошлом, немного похоже на пример в этого SOответ (вы можете просто заменить fromElements на источник Кафки).

При работе с потоками следует помнить, что у вас НЕ имеется никаких гарантий упорядочения при использовании данных из двух тем Кафкиt1 и t2.Ваш код должен учитывать сообщения, поступающие в любом порядке.

Редактировать - только что понял, что ваш вопрос, вероятно, был о том, как можно реализовать объединение с использованием потоков Kafka, а не потока данных из Kafka.В этом случае вы, вероятно, найдете соответствующую информацию здесь

...