【问题标题】:Apache Flink: Watermarks, Dropping Late Events, and Allowed LatenessApache Flink:水印、丢弃延迟事件和允许延迟
【发布时间】:2019-05-09 06:17:35
【问题描述】:

我无法理解水印和允许延迟的概念。

以下是 [邮件存档|https://www.mail-archive.com/user@flink.apache.org/msg08758.html] 的摘录,其中谈到了水印,但我还有几个问题。以下是引用的例子:

假设您有一个BoundedOutOfOrdernessTimestampExtractor,有 2 分钟的界限和 10 分钟的滚动窗口,从 12:00 开始到 12:10 结束:

如果你有以下流序列:

12:01, A
12:04, B
WM, 12:02 // 12:04 - 2 minutes
12:02, C
12:08, D
12:14, E
WM, 12:12
12:16, F
WM, 12:14 // 12:16 - 2 minutes
12:09, G

不允许迟到

窗口运算符在收到<WM, 12:12> 时将逻辑时间转发到12:12,并评估此时包含[A, B, C, D] 的窗口并最终清除其状态。 <12:09, G> 稍后会被忽略。

允许迟到 3 分钟

窗口运算符在收到<WM, 12:12> 时评估窗口,但其状态尚未清除。收到<WM, 12:14> 时清除状态(窗口触发时间 12:10 + 允许延迟 3 分钟)。 <12:09, G> 再次被忽略。

允许迟到 5 分钟

窗口运算符在收到<WM, 12:12> 时评估窗口,但其状态尚未清除。当收到<12:09, G> 时,再次评估窗口,但这次使用[A, B, C, D, G] 并发送更新。当收到 >= 12:15 的水印时,状态将被清除。

据我了解:

  1. 水印应该告诉任何到达的事件时间戳小于水印的元素将被丢弃。所以 12:02 的水印意味着 Flink 已经看到了它必须看到的所有内容,直到事件时间 12:02。事件时间戳小于此水印的任何元素,例如12:01 将被删除。
  2. 允许延迟的概念仅适用于标记窗口结束的最后一个水印之后

我的问题基于理解:

  1. 考虑到 Flink,消息“12:02,C”的娱乐性如何,带有先前的水印(WM,12:02),已经说过“我已经看到了一切,直到事件时间 12:02”?
  2. 我已经调整了流序列,并在流序列中以粗体显示的点插入了另一条记录 12:01,CCC。

如果你有以下流序列:

12:01, A
12:04, B
WM, 12:02 // 12:04 - 2 minutes
12:02, C
 12:01, CCC // Inserted by Sheel
12:08, D
12:14, E
WM, 12:12
12:16, F
WM, 12:14 // 12:16 - 2 minutes
12:09, G

这仍然在 12:00-12:10 窗口中,但在水印 WM 之后,即 12:02。假设允许的迟到是 5 分钟。是否会“以某种方式”接受此记录,从而将允许的延迟纳入图片,或者考虑到水印 12:02 已经越过,是否会删除此记录?

【问题讨论】:

    标签: apache-flink flink-streaming windowing


    【解决方案1】:

    Watermarks 控制窗口的生命周期,但不直接控制记录是否被删除。当 Flink 的 WindowOperator 收到一条新记录时,它会计算它落入的窗口集合。如果该集合至少包含一个活动窗口,即没有大于窗口结束时间+允许延迟的值的水印,则记录将分配给该窗口并成为窗口计算的一部分(即使该记录的时间戳低于上次看到的水印)。因此,可以说窗口降低了水印相对于单个记录的分辨率。

    在您的情况下,这意味着CCCC 都将成为窗口12:00 - 12:10 的一部分,因为系统还没有看到>= 12:10Watermark

    【讨论】:

    • 另一种考虑水印的方式是,它们触发已安排在特定时间的计算。只要窗口未被评估,即直到水印超过窗口结束时间,就可以将记录添加到窗口中。默认情况下,窗口的内容在评估后会被删除(因此不能将迟到的事件添加到结果中)。在允许延迟的情况下,窗口内容会保持更长时间,并且可以使用延迟事件来更新结果。
    • 如果没有迟到元素,当迟到过去时,窗口是否仍然被触发。例如。窗口在 t 结束,窗口触发。延迟在 t+2 到期,但在 t 和 t+2 之间没有延迟元素到达,然后窗口计算仍然被触发,或者只是在没有任何窗口计算的情况下清除状态。 @FabianHueske
    • 我认为默认情况下,窗口结果仅在收到延迟记录时才会更新。但这可以通过自定义触发器显式控制。
    猜你喜欢
    • 2021-10-05
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多