Apache Flink 连接与加入
Apache Flink connect versus join
在Apache Flink流处理中join操作和connect有什么不同,CoProcessFunction和ProcessJoinFunction有什么不同,是CoProcessFunction提供的onTimer函数吗?您能否提供一个适合以互斥方式加入/连接的示例用例。
差别还是挺大的。在 Join 的情况下,它的工作方式或多或少类似于 SQL Inner Join,因此您需要提供将用于加入的字段,并且 Join
在 window 上进行评估。
所以,基本上,您为将用于加入的每个 window 和将用于评估结果的 window 定义键。 ProcessJoinFunction
允许您在处理连接元素后对其进行处理 但您无法控制连接机制本身,即这对已连接的元素将被传递给 ProcessJoinFunction
在 connect
的情况下,您还可以定义键(虽然您不必这样做),但这些键将不用于连接,而是用于控制通过并行运算符实例和键控状态的流程.因此,在连接的情况下,没有逻辑负责如何连接元素,而是调用来自 stream1 方法 processElement1
的每个元素以及来自 stream2 方法 processElement2
的每个元素叫。所以,如果你想执行某种连接,你必须自己实现逻辑。
在Apache Flink流处理中join操作和connect有什么不同,CoProcessFunction和ProcessJoinFunction有什么不同,是CoProcessFunction提供的onTimer函数吗?您能否提供一个适合以互斥方式加入/连接的示例用例。
差别还是挺大的。在 Join 的情况下,它的工作方式或多或少类似于 SQL Inner Join,因此您需要提供将用于加入的字段,并且 Join
在 window 上进行评估。
所以,基本上,您为将用于加入的每个 window 和将用于评估结果的 window 定义键。 ProcessJoinFunction
允许您在处理连接元素后对其进行处理 但您无法控制连接机制本身,即这对已连接的元素将被传递给 ProcessJoinFunction
在 connect
的情况下,您还可以定义键(虽然您不必这样做),但这些键将不用于连接,而是用于控制通过并行运算符实例和键控状态的流程.因此,在连接的情况下,没有逻辑负责如何连接元素,而是调用来自 stream1 方法 processElement1
的每个元素以及来自 stream2 方法 processElement2
的每个元素叫。所以,如果你想执行某种连接,你必须自己实现逻辑。