关于延迟元素,在方法BoundedOutOfOrdernessTimestampExtractor中指定Time.seconds(60)参数 和 在方法allowedLateness中指定Time.seconds(60)参数,两种有什么区别呢?混用是否冲突?
.assignTimestampsAndWatermarks(new BoundedOutOfOrdernessTimestampExtractor(Time.seconds(60)) {
@Override
public long extractTimestamp(CommonEvent commonEvent) {
return commonEvent.getServer_time();
}
})
.allowedLateness(Time.seconds(60))
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Apache Flink中,处理时间窗口和事件时间窗口时,BoundedOutOfOrdernessTimestampExtractor
和 allowedLateness
方法分别扮演了不同的角色,它们共同帮助处理乱序事件,但侧重点不同。
BoundedOutOfOrdernessTimestampExtractor:
Time.seconds(60)
时,意味着你允许数据源中的事件最多可以晚到60秒而不被视为迟到事件。换句话说,这个参数定义了水印(watermark)的生成策略,水印是Flink用来确定某一时间点之前的所有事件都已到达的机制。allowedLateness:
Time.seconds(60)
,那么任何在窗口结束时间后60秒内到达的事件都将被处理,而不是直接丢弃。混用是否冲突? - 它们并不冲突,而是互补的。BoundedOutOfOrdernessTimestampExtractor
确保了水印的生成逻辑,允许系统对乱序事件有一定的容忍度,而 allowedLateness
则进一步扩展了这种容忍度,即使在水印已经过了某个时间点后,仍然可以接收并处理一定时间内的迟到事件。 - 实际上,合理的组合使用这两个功能可以更灵活地应对现实世界中数据乱序的情况,提高系统的健壮性和数据处理的完整性。只要你的业务逻辑允许,这样的设置是非常实用的。