Flink BroadcastProcessFunction 与 CoProcessFunction

Flink BroadcastProcessFunction vs CoProcessFunction

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

什么时候应该使用广播状态模式以及什么时候可以使用普通 .connect + CoProcessFunction ?

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

将其发送给所有并行运算符

CoProcessFunction 将允许您以某种方式处理连接并在所有并行实例中分区的两个流,无论是使用 keyByrebalance 还是任何其他方式。

所以,基本上区别在于,如果你有两个流 s1s2 以及并行度 3。如果你广播流 s1 这意味着来自 s1 将传递给 BroadcastProcessFunction 的每个实例。但是,如果您执行 s1.connect(s2) 之类的操作,那么根据分区,只有来自 s1 的部分元素子集将被传递给每个 CoProcessFunction

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