Apache flink ApacheFlink:水印、删除延迟事件和允许延迟
我很难理解水印和允许迟到的概念 下面是[mail archive]中的一段摘录,其中谈到了水印,但我还有几个问题。下面是引用的示例: 假设您有一个Apache flink ApacheFlink:水印、删除延迟事件和允许延迟,apache-flink,flink-streaming,windowing,Apache Flink,Flink Streaming,Windowing,我很难理解水印和允许迟到的概念 下面是[mail archive]中的一段摘录,其中谈到了水印,但我还有几个问题。下面是引用的示例: 假设您有一个boundedAutofordernessTimestampExtractor,有一个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:1
boundedAutofordernessTimestampExtractor
,有一个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: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:12,并在此时评估包含[A、B、C、D]
的窗口,最后清除其状态。
稍后被忽略
允许迟到3分钟
当收到
时,窗口操作员对窗口进行评估,但其状态尚未清除。当收到
时,状态被清除(窗口点火时间12:10+3分钟允许延迟)。
再次被忽略
允许迟到5分钟
当接收到
时,窗口操作符对窗口进行评估,但其状态尚未清除。当接收到
时,再次对窗口进行评估,但这次使用[A、B、C、D、G]
并发送更新。当接收到大于等于12:15的水印时,状态被清除
据我了解:
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: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已经越过,这会被删除?水印控制窗口的生存期,但不直接控制记录是否被删除。当Flink的
WindowOperator
接收到新记录时,它将计算它所使用的窗口集落入。如果此集合至少包含一个活动窗口,这意味着没有大于窗口结束时间+允许延迟的水印,则记录将被分配到此窗口,并将成为窗口计算的一部分(即使记录的时间戳低于上次看到的水印)。因此,可以说windows降低了单个记录的水印分辨率
在您的情况下,这意味着
C
和CCC
都将成为窗口12:00-12:10
的一部分,因为系统还没有看到带有>=12:10
的水印。考虑水印的另一种方式是,它们触发已安排在特定时间的计算。记录C只要未对窗口进行评估,就可以将水印添加到窗口中,即直到水印超过窗口结束时间。默认情况下,评估后将删除窗口的内容(因此不能将延迟事件添加到结果中)。在允许延迟的情况下,窗口内容会被保留更长的时间,并且延迟事件可以用来更新结果。如果没有延迟元素,那么当延迟消失时,窗口是否仍会被触发。例如,窗口在t结束,窗口触发。延迟在t+2过期,但在t和t+2之间没有延迟元素到达,那么窗口c是否会被触发计算仍然被触发,或者只是状态被清除而没有任何窗口计算。@FabianHueskeI认为默认情况下,窗口结果只有在收到延迟记录时才会更新。但这可以通过自定义触发器显式控制。