BroadcastProcessFunction
和CoProcessFunction
有什么不同?据我所知,在他们的帮助下,你可以做非常相似的事情我的意思是.connect
流,并并行处理来自两个流的消息。也就是说,使用CoProcessFunction
可以实现广播状态的功能。
什么时候应该使用广播状态模式,什么时候可以使用纯.connect
+CoProcessFunction
?
区别在于名称:)BroadcastProcessFunction
允许您广播一个流到所有并行操作符实例,因此,如果其中一个流包含通用数据,如用于映射的字典,那么您可以简单地使用broadcast
将其发送到所有并行操作符。
CoProcessFunction
将允许您处理两个流连接和分区在所有并行实例以某种方式,无论是使用keyBy
或rebalance
或任何其他方式。
s1
和s2
,并行度为3。如果你广播流s1
,这意味着所有来自s1
的元素将被传递到BroadcastProcessFunction
的每个实例。但是,如果您执行类似s1.connect(s2)
的操作,则根据分区,只有s1中的一些元素子集将传递给每个CoProcessFunction
。
请注意,如果您使用parallelism
等于1,两个函数在处理方面的工作将或多或少相同。