文章目录

前言

一、参数解释

1.MaxOutOfOrderness

2.Allowedlateness

二、区别说明

总结




前言

WaterMark参数MaxOutOfOrderness和窗口函数中的Allowedlateness参数区别


提示:以下是本篇文章正文内容,下面案例可供参考

一、参数解释

1.MaxOutOfOrderness

source.map(...//省略不必要代码)
      // 定义 watermark
      .assignTimestampsAndWatermarks(
            // 设置 watermark 比 事件时间晚 1s
            WatermarkStrategy.<ApacheLogEvent>forBoundedOutOfOrderness(Duration.ofSeconds(1))
            // 定义 watermark 生成规则
            .withTimestampAssigner(...//省略不必要代码));

定义 watermark 的时候可以设置生成 watermark 的时间比事件时间延迟多久,即 eventTime + maxoutoforderness

2.Allowedlateness

dataStream.keyBy(...//省略不重要的代码)
    .timeWindow(Time.minutes(10), Time.seconds(5))
    // 定义窗口关闭的延迟时间
    .allowedLateness(Time.minutes(1))

定义 开窗函数 的时候可以设置生成 allowedLateness,当前窗口在watermark满足 windowEndTime 的时候,在延迟 allowedLateness 时间之后再关闭,即知道 watermark 到了 windowEndTime + allowedLateness 之后,当前窗口才关闭。

二、区别说明

1.MaxOutOfOrderness 作用于全局使用到事件事件的所有操作,包含定时器、窗口函数等。

2.Allowedlateness 只作用于事件事件的窗口函数,当 watermark通过窗口的终点时,一个事件时间窗口将被触发,在有一些允许的延迟的情况下,该窗口将在每个延迟事件到达时再次触发,直到允许的延迟过期为止(此触发行为可以自定义——这是默认设置)。一旦允许的延迟过期,窗口的状态将被清除,然后延迟事件要么被丢弃,要么被发送到一个侧面输出(如果配置了一个)。


总结

同时使用这两种机制是很有用的,因为您可以让窗口在 watermark定义的自然窗口结束时同时触发,并且在延迟事件到达时具有更新的结果。

watermark的目的是控制延迟和完整性之间的权衡。能够要求以较低的延迟(即相对较短的MaxOutOfOrderness)生成结果,同时适应非常晚的事件是很有用的。


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档