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