【发布时间】:2020-07-07 12:04:40
【问题描述】:
在 Apache Flink 流处理中,join 操作与 connect 有什么不同,因此 CoProcessFunction 和 ProcessJoinFunction 有什么不同,是 CoProcessFunction 提供的 onTimer 函数吗?您能否提供一个适合以互斥方式加入/连接的示例用例。
【问题讨论】:
标签: join stream apache-flink distributed-system
在 Apache Flink 流处理中,join 操作与 connect 有什么不同,因此 CoProcessFunction 和 ProcessJoinFunction 有什么不同,是 CoProcessFunction 提供的 onTimer 函数吗?您能否提供一个适合以互斥方式加入/连接的示例用例。
【问题讨论】:
标签: join stream apache-flink distributed-system
差异非常显着。在 Join 的情况下,它的工作方式或多或少类似于 SQL Inner Join,因此您需要提供将用于连接的字段,并且在窗口上评估 Join。
所以,基本上你为每个将用于连接的窗口和用于评估结果的窗口定义键。 ProcessJoinFunction 允许您在处理后处理已连接的元素但您无法控制连接机制本身,即已连接的元素对将传递给ProcessJoinFunction
在connect 的情况下,您还可以定义键(尽管您不必这样做),但这些键不会用于连接,而是用于控制通过运算符的并行实例和键控状态的流。因此,在连接的情况下,没有逻辑负责元素的连接方式,而是将调用 stream1 方法 processElement1 中的每个元素,并调用 stream2 方法 processElement2 中的每个元素。所以,如果你想执行某种连接,你必须自己实现逻辑。
【讨论】:
connect 是我想说的首选方式。