【发布时间】:2021-04-09 14:20:52
【问题描述】:
给定 10 秒的窗口大小、1 秒的水印间隔和 5 秒的 slack
(例如使用BoundedOutOfOrdernessTimestampExtractor),当应用程序第一次启动时,这是否意味着第一个窗口要到15 秒才会触发(为了说明窗口处理中包含的所有事件的5 秒时间间隔)?
此外,如果窗口是按纪元间隔触发的,这又是如何工作的?
【问题讨论】:
标签: apache-flink
给定 10 秒的窗口大小、1 秒的水印间隔和 5 秒的 slack
(例如使用BoundedOutOfOrdernessTimestampExtractor),当应用程序第一次启动时,这是否意味着第一个窗口要到15 秒才会触发(为了说明窗口处理中包含的所有事件的5 秒时间间隔)?
此外,如果窗口是按纪元间隔触发的,这又是如何工作的?
【问题讨论】:
标签: apache-flink
当一个足够大的水印到达窗口时,第一个窗口将被触发,这与应用程序运行了多长时间无关。让我们考虑几个案例:
(1) 如果您正在处理历史数据,那么仔细阅读足够多的数据来触发第一个窗口可能只需要几分之一毫秒。
(2) 另一方面,如果数据源变得空闲,时间戳(和水印)可能永远不会前进到足以触发第一个窗口的程度。 “为什么我的窗口从来没有产生任何结果?”是一个常见的 Stack Overflow 问题。
但是,是的,如果您正在对连续的实时近实时数据流进行事件时间处理,那么第一个窗口将在应用程序启动后的 5 到 15 秒之间触发,或多或少。窗口将与纪元对齐,因此第一个窗口的结束时间将在应用程序启动后最多 10 秒,并且大约需要 5 秒才能生成水印。 (我说“大致”是因为在这种情况下我们将事件时间和处理时间混合在一起,这不能确定地完成。)
【讨论】: