【问题标题】:Apache Flink connect versus joinApache Flink 连接与加入
【发布时间】:2020-07-07 12:04:40
【问题描述】:

在 Apache Flink 流处理中,join 操作与 connect 有什么不同,因此 CoProcessFunction 和 ProcessJoinFunction 有什么不同,是 CoProcessFunction 提供的 onTimer 函数吗?您能否提供一个适合以互斥方式加入/连接的示例用例。

【问题讨论】:

    标签: join stream apache-flink distributed-system


    【解决方案1】:

    差异非常显着。在 Join 的情况下,它的工作方式或多或少类似于 SQL Inner Join,因此您需要提供将用于连接的字段,并且在窗口上评估 Join。

    所以,基本上你为每个将用于连接的窗口和用于评估结果的窗口定义键。 ProcessJoinFunction 允许您在处理后处理已连接的元素但您无法控制连接机制本身,即已连接的元素对将传递给ProcessJoinFunction

    在connect 的情况下,您还可以定义键(尽管您不必这样做),但这些键不会用于连接,而是用于控制通过运算符的并行实例和键控状态的流。因此,在连接的情况下,没有逻辑负责元素的连接方式,而是将调用 stream1 方法 processElement1 中的每个元素,并调用 stream2 方法 processElement2 中的每个元素。所以,如果你想执行某种连接,你必须自己实现逻辑。

    【讨论】:

    • 谢谢你更清楚。因此,如果我连接两个流 S1 和 S2,其中 S1 在时间 t1(比如事件时间)发出,然后 S2 在时间 t2 发出,然后是 t3,然后是 t4,所以我可以得出结论,作为连接两个流的结果 processElement1 将被调用一次 ~time t1 和 processElement2 将在 ~ t2、t3 和 t4 被调用 3 次,...准确吗?
    • 完全正确 :) 一般来说,如果您想拥有更复杂的逻辑来连接这些元素,那么connect 是我想说的首选方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多