Flink:如何按键加入/分组2个流?

时间:2019-06-12 15:42:50

标签: apache-flink flink-streaming

我有2个事件流,其中一个是flatmap的结果。我想加入所有具有共同标识符的事件。

因此,我看起来像:

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

TypeATypeB都共享一个标识符,我知道父对象中有多少TypeB个对象。当与特定标识符关联的所有事件都到达时,即我基本上可以创建Tuple3<id, TypeA, List<TypeB>>对象时,我想执行一些处理。

最好使用WindowJoinGlobalWindowWindow CoGroupGlobalWindow或将两个流连接到ConnectedStream然后执行CoProcessFunction内的联接?

1 个答案:

答案 0 :(得分:0)

Windows是Flink模拟批处理的方式,认为这不是您要搜索的内容。

只需制作

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

然后,您可以应用CoProcess或CoFlatMap函数,其中IN1为StreamA类型,IN2为StreamB类型。 OUT是您的结果类型。