【问题标题】:Apache Flink: How are late events handled?Apache Flink:延迟事件如何处理?
【发布时间】:2017-06-30 00:48:58
【问题描述】:

如果一个违反水印条件的元素到达,该事件如何处理?它被扔掉了吗?或者事件是否仍然通过延迟事件重新计算过去的窗口函数向下游传播?

文档承认延迟事件会发生,但没有解释如何处理它们。 https://ci.apache.org/projects/flink/flink-docs-release-1.0/apis/streaming/event_time.html

【问题讨论】:

    标签: apache-flink flink-streaming


    【解决方案1】:

    默认情况下,当水印超过窗口末尾时,后期元素会被丢弃。但是,Flink 允许为窗口操作符指定最大允许延迟。 Allowed lateness 指定元素在被删除之前可以延迟多少时间,其默认值为 0。在 watermark 超过窗口结束但在它通过窗口结束之前到达的元素加上允许的延迟,仍然添加到窗口中。根据使用的触发器,迟到但未删除的元素可能会导致窗口再次触发。 EventTimeTrigger 就是这种情况。

    为了完成这项工作,Flink 会保持窗口的状态,直到它们允许的延迟到期。一旦发生这种情况,Flink 就会移除窗口并删除其状态。

    您可以在此处查看生命周期。 https://ci.apache.org/projects/flink/flink-docs-release-1.3/dev/windows.html#window-lifecycle

    【讨论】:

      【解决方案2】:

      从 Flink 1.0 开始,后期元素是通过使用仅包含后期事件的“单例”窗口重新评估窗口函数来处理的。

      在未来的 Flink 版本中,用户将对此行为有更多的控制权。从 flink-dev 邮件列表中查看此线程:

      http://mail-archives.apache.org/mod_mbox/flink-dev/201604.mbox/%3CCANMXwW3_Ew38KyL0q=q70pC03=UD=KaLQ0XmRyTNE77udAsh=w@mail.gmail.com%3E

      【讨论】:

        猜你喜欢
        • 2021-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多