Apache Flink:水印,放弃晚期事件并允许迟到



我很难理解水印的概念并允许迟到。

以下是[邮件存档| 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

不允许迟到

窗口运算符将逻辑时间转发至12:12它接收<WM, 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。任何具有事件时间ATAMP的元素要比此水印要小,例如12:01将被丢弃。
  2. 允许迟到的概念仅在标记窗户末端的最后一个水印之后才适用

我的问题基于理解:

  1. 考虑到Flink的消息" 12:02,c"是如何带有以前的水印(WM,12:02(的Flink,已经说过" 我已经看过一切,直到活动时间12:02 "?
  2. 我已经调整了流序列,并在流序列中以BOLD为BOLD所示的点插入了另一个记录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窗口中,但在Watermark Wm的后面,12:02。假设允许的迟到为5分钟。是否会接受此记录"某种程度上"将允许的迟到带入图片中,还是考虑到水印12:02已经越过?

Watermarks控制窗口的寿命,而不是直接删除记录。当Flink的WindowOperator收到新记录时,它将计算其掉入其中的窗口集。如果此集合至少包含一个活动窗口,则意味着没有高于窗口的末端时间 允许迟到的水印,将记录分配给此窗口,并将成为窗口计算的一部分(即使记录的时间戳低于最后一个看到的水印(。因此,可以说窗户减少了有关单个记录的水印的分辨率。

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

相关内容

  • 没有找到相关文章

最新更新