我有 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
内执行连接来完成?
Windows 是 Flink 模拟批处理的方式,认为这不是你要搜索的。
只需制作类似的东西
streamA.keyBy(element.getFieldToKey).connect(streamB.keyBy(element.getFieldToKey))
然后,您可以应用 CoProcess 或 CoFlatMap 函数,其中 IN1 是 StreamA 类型,IN2 是 StreamB 类型。OUT 是您的结果类型。