【发布时间】: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 的水印时,状态将被清除。
据我了解:
- 水印应该告诉任何到达的事件时间戳小于水印的元素将被丢弃。所以 12:02 的水印意味着 Flink 已经看到了它必须看到的所有内容,直到事件时间 12:02。事件时间戳小于此水印的任何元素,例如12:01 将被删除。
- 允许延迟的概念仅适用于标记窗口结束的最后一个水印之后
我的问题基于理解:
- 考虑到 Flink,消息“12:02,C”的娱乐性如何,带有先前的水印(WM,12:02),已经说过“我已经看到了一切,直到事件时间 12:02”?
- 我已经调整了流序列,并在流序列中以粗体显示的点插入了另一条记录 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