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



我有 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,还是通过将2个流连接到一个ConnectedStream然后在CoProcessFunction内执行连接来完成?

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

只需制作类似的东西

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

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

最新更新