前言
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)生成结果,同时适应非常晚的事件是很有用的。
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
|