Flink 首先 window 触发

Flink first window firing

给定 window 大小为 10 秒,水印间隔为 1 秒,松弛时间为 5 秒 (例如使用 BoundedOutOfOrdernessTimestampExtractor),当应用程序首次启动时,这是否意味着第一个 window 直到 15 秒才会触发(为了考虑到所有要包含的事件的 5 秒松弛时间在 window 处理中)?

此外,这与 windows 在纪元间隔触发的事实有何关系?

第一个 window 将在足够大的水印到达 window 时触发,这与应用程序 运行 的时长无关。让我们考虑几个案例:

(1) 如果您正在处理历史数据,那么通过足够的数据来触发第一个 window 可能只需要几分之一毫秒。

(2) 另一方面,如果数据源空闲,时间戳(和水印)可能永远不会提前到足以触发第一个 window。 “为什么我的 window 从来没有产生任何结果?”是一个常见的 Stack Overflow 问题。

但是是的,如果您正在对连续的实时数据流进行事件时间处理,那么第一个 window 将在应用程序启动后的 5 到 15 秒之间的某个时间触发, 或多或少。 windows 将与纪元对齐,因此第一个 window 的结束时间将在应用程序启动后最多 10 秒的任何地方,水印大约还需要 5 秒才能完成产生。 (我说“大致”是因为我们在这种情况下将事件时间和处理时间混合在一起,这不能确定地完成。)