实时系统中,由于各种原因造成的延时,造成某些消息发到lflink的时间延时于事件产生的时间。如果
基于event time构建window,但是对于late element,我们又不能无限期的等下去,必须要有个机
制来保证一个特定的时间后,必须触发window去进行计算了。这个特别的机制,就是watermark
Watermarks(水位线)就是来处理这种问题的机制
参考google的DataFlow,是event time处理进度的标志
表示比watermark更早(更老)的事件都已经到达(没有比水位线更低的数据)
基于watermark来进行窗口触发计算的判断
只有基于EventTime的流处理程序需要指定Timestamp 和Watermarks的生成方式
方式1:直接在source function中生成
方式2: 通过AssigTimestampsAndWatermarks方法指定
两种Watermark
基于Timer
ExecutionConfig.setAutoWatermarkInterval(msec)(默认是200ms,设置watermarker"发送的周期)
实现AssignerWithPeriodicWatermarks接口
周期性调用getCurrentWatermark,如果获取的Watermark不等于null且比上一个最新的Watermark大
就向下游发射
基于某些事件触发watermark的生成和发送(由用户代码实现,例如遇到特殊元素)
实现AssignerWithPeriodicWatermarks 接口
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。