apache-flink - Flink BroadcastProcessFunction vs CoProcessFunction
问题描述
BroadcastProcessFunction
和 和有什么区别CoProcessFunction
?据我了解,您可以在我的意思是流的帮助下做非常相似的事情.connect
,并并行处理来自两个流的消息。也就是说,使用CoProcessFunction
你可以实现 Brodcast State 的功能。
什么时候应该使用广播状态模式,什么时候可以使用纯.connect
+ CoProcessFunction
?
解决方案
真正的区别在于名称:)BroadcastProcessFunction
允许您将其中一个流广播到所有并行运算符实例,因此如果其中一个流包含通用数据(例如用于映射的字典),那么您可以简单地将其发送给所有并行运算符使用broadcast
.
这CoProcessFunction
将允许您以某种方式(通过使用或任何其他方式)处理在所有并行实例之间连接和分区的两个keyBy
流rebalance
。
所以,基本上不同之处在于,如果你有两个流s1
并且s2
并行度为 3。如果你广播流s1
,这意味着来自的所有元素s1
将被传递给BroadcastProcessFunction
. 但是,如果您执行类似的操作s1.connect(s2)
,则仅 s1 中的某些元素子集将传递给 each CoProcessFunction
,具体取决于分区。
请注意,如果您将使用parallelism
等于 1,则这两个函数在处理方面的工作方式或多或少相同。
推荐阅读
- python - 试图创建一个程序来跟踪我添加但卡住的输入
- ruby-on-rails - 具有多个选择以散列的 Arel
- javascript - 即使在滚动内容结束后,水平图像滑块 1px 内容也会偶尔保留在 Ipad 中
- arrays - 行中的参考值取决于另一个单元格中的值
- reactjs - 如何使用 Firebase (V9) 和 React (V 17)?
- angular - Angular Jasmine 单元测试:模拟在从组件调用的服务中调用的 HTTP 请求的结果
- android - 电容器 - 从科尔多瓦迁移后,默认情况下在 Android 上禁用浮动通知
- powerquery - 根据特定单元格值创建新列
- sql - 如何查找是否定义了 SORTKEY 以及它是如何从目录表中定义的?
- oracle - 如何在 oracle 中查找特定值