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 будут читать сообщения в течение определенного промежутка времени, поэтому вы можете использовать это. Однако из вашего примера данных похоже, что это может быть, а может и не быть, если только ваши временные метки не являются просто моментом прибытия сообщения.
Однако все это развалится, как только вам потребуется масштабирование до второго экземпляра, если обе очереди не будут разделены одинаково.
В качестве альтернативы вы пишете в промежуточное хранилище данных для хранения данных из очередей и выполняете поиск по этим данным.