当前位置:   article > 正文

flink的水位线和窗口_flink 1.9设置水位线

flink 1.9设置水位线

|本文基于flink-1.9.3,其中官网 docs:

  1. 内置水位线api:Apache Flink 1.9 Documentation: Pre-defined Timestamp Extractors / Watermark Emitters
  2. 自定义水位线api: Apache Flink 1.9 Documentation: Generating Timestamps / Watermarks

一、概念补充

|flink-1.9 docs:Apache Flink 1.9 Documentation: Event Time

1.时间语义:

一个是数据产生的时间,我们把它叫作“事件时间”(Event Time);另一个是数据真正被处理的时刻,叫作“处理时间”(Processing Time)。我们所定义的窗口操作,到底是以哪种时间作为衡量标准,就是所谓的“时间语义”(Notions of Time)。由于分布式系统中网络传输的延迟和时钟漂移,处理时间相对事件发生的时间会有所滞后。

2.事件时间

一个是数据产生的时间,我们把它叫作“事件时间”(Event Time);

3.处理时间

另一个是数据真正被处理的时刻,叫作“处理时间”(Processing Time);

4.水位线:

事件时间中,使用数据自带的时间戳定义一个时钟来表示当前时间的进展。每个子任务都有自己的时钟,由数据的时间戳推动。

但在分布式系统中,这可能引发问题。特别是在执行窗口聚合等操作时,数据减少,时钟控制变得不够精细。此外,数据只能传递给下游任务的一个子任务,导致其他子任务的时钟停滞。例如,如果一个时间戳为9点的数据到达,当前任务的时钟已经是9点;处理后,将数据发送到下游,如果下游任务是窗口计算,且并行度为3,那么接收到数据的子任务的时钟也会是9点,可以关闭9点结束的窗口进行计算,而其他两个子任务的时钟则没有改变,无法进行窗口计算。

因此,需要将时钟以数据的形式传递给下游任务,告知它们当前事件时间的进展。这种标记被称为“水位线”(Watermark)。水位线是一种特殊的数据记录,插入到数据流中,包含一个时间戳,用于指示当前事件时间。它应在某个数据到达后插入数据流中,以便从该数据中提取时间戳,并用作当前水位线的时间戳。

水位线的默认计算公式:水位线 = 观察到的最大事件时间

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/544089
推荐阅读
相关标签
  

闽ICP备14008679号