首页 > 解决方案 > Flink BroadcastProcessFunction vs CoProcessFunction

问题描述

BroadcastProcessFunction和 和有什么区别CoProcessFunction?据我了解,您可以在我的意思是流的帮助下做非常相似的事情.connect,并并行处理来自两个流的消息。也就是说,使用CoProcessFunction你可以实现 Brodcast State 的功能。

什么时候应该使用广播状态模式,什么时候可以使用纯.connect+ CoProcessFunction

标签: apache-flink

解决方案


真正的区别在于名称:)BroadcastProcessFunction允许您将其中一个流广播到所有并行运算符实例,因此如果其中一个流包含通用数据(例如用于映射的字典),那么您可以简单地将其发送给所有并行运算符使用broadcast.

CoProcessFunction将允许您以某种方式(通过使用或任何其他方式)处理在所有并行实例之间连接和分区的两个keyByrebalance

所以,基本上不同之处在于,如果你有两个流s1并且s2并行度为 3。如果你广播流s1,这意味着来自的所有元素s1将被传递给BroadcastProcessFunction. 但是,如果您执行类似的操作s1.connect(s2),则仅 s1 中的某些元素子集将传递给 each CoProcessFunction,具体取决于分区。

请注意,如果您将使用parallelism等于 1,则这两个函数在处理方面的工作方式或多或少相同。


推荐阅读