Flink 中 MaxOutOfOrderness 和 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)生成结果,同时适应非常晚的事件是很有用的。


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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值