Flink: как объединить / сгруппировать 2 потока по ключу? - PullRequest
1 голос
/ 12 июня 2019

У меня есть 2 потока событий, один из которых является результатом flatmap.Я хочу присоединиться ко всем событиям, которые имеют общий идентификатор.

Таким образом, у меня есть нечто, похожее на:

DataStream<TypeA> streamA = ...
DataStream<TypeB> streamB = someDataStream.flatMap(...) // produces stream of TypeB for each item in someDataStream

И у TypeA, и у TypeB общий идентификатор, и я знаю, какмного TypeB объектов есть в родительском объекте.Я хочу выполнить некоторую обработку, когда все события, связанные с определенным идентификатором, поступили, т.е. когда я в основном могу создать Tuple3<id, TypeA, List<TypeB>> объект.

Лучше ли это делать с WindowJoin и GlobalWindow, Window CoGroup и GlobalWindow или путем соединения 2 потоков в ConnectedStream с последующим выполнением соединения внутри CoProcessFunction?

1 Ответ

0 голосов
/ 18 июня 2019

Windows - это то, как Flink имитирует пакетирование, думайте, что это не то, что вы ищете.

Просто создайте что-то вроде

streamA.keyBy(element.getFieldToKey).connect(streamB.keyBy(element.getFieldToKey))

Тогда вы можете применить функцию CoProcess или CoFlatMap, гдеВаш IN1 является типом StreamA, а IN2 является типом StreamB.OUT - ваш тип результата.

...