Kafka - объединение данных из двух разных потоков, когда данные поступают в разное время

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

inputStream1 ->

  • ключ 111, значение 21:00 AAA
  • ключ 111, значение 21:02 AAA
  • ключ 111, значение 21:04 AAA
  • ключ 111, значение 21:15 AAA
  • ключ 111, значение 21:18 BBB
  • ключ 111, значение 21:20 BBB

inputStream2 ->

  • ключ 111, значение 21:01 10.0.0.1
  • ключ 111, значение 21:04 10.0.0.2
  • ключ 111, значение 21:14 10.0.0.3
  • ключ 111, значение 21:20 10.0.0.4
  • ключ 111, значение 21:21 10.0.0.5

выход Присоединяйтесь, что мне нужно ->

  • AAA 10.0.0.1
  • AAA 10.0.0.2
  • AAA 10.0.0.3
  • BBB 10.0.0.4
  • BBB 10.0.0.5

Примечание. Оба потока получают данные в разное время. Возможно, что когда приходит первая запись на inputStream1, inputStream2 имеет все 5 записей. Я хочу сопоставить их во временном окне, которое находится в значении.

Как я могу этого добиться в кафке. Это вообще возможно?

Нажмите, чтобы увидеть изображение

1 ответ

С одним лишь Кафкой это было бы очень сложно или почти невозможно. Теоретически у вас может быть одноэлементный сервер, который читает из обеих очередей и выполняет корреляцию, читая ровно столько, сколько нужно из каждой очереди, чтобы записи в памяти совпадали друг с другом.

Если вы хотите сопоставить данные только в пределах заданного промежутка времени, некоторые клиентские библиотеки Kafka будут читать сообщения в течение определенного промежутка времени, поэтому вы можете использовать это. Однако из вашего примера данных похоже, что это может быть, а может и не быть, если только ваши временные метки не являются просто моментом прибытия сообщения.

Однако все это развалится, как только вам потребуется масштабирование до второго экземпляра, если обе очереди не будут разделены одинаково.

В качестве альтернативы вы пишете в промежуточное хранилище данных для хранения данных из очередей и выполняете поиск по этим данным.

Другие вопросы по тегам