Flink之时间语义与Wartermark

时间语义

Event Time:事件创建的时间
Ingestion Time:数据进入Flink的时间
Processing Time: 执行操作算子的本地系统时间,与机器相关

在代码中设置EventTime

//从调用时刻开始给env创建的每一个stream追加时间特征
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)

乱序数据的处理

当Flink以Evnent Time模式处理数据流时,它会根据数据里的时间戳来处理基于时间点的算子;
由于网络、分布式等原因,会导致乱序数据的产生;
乱序数据会让窗口计算不准确

水位线(Watermark)

遇到一个时间戳达到了窗口关闭时间,不应该立刻除法窗口计算,而是等待一段时间,等迟到的数据来了在关闭窗口
Watermark是一种衡量Event Time进展的机制,可以设定延迟触发;
Watermark是用于处理乱序事件的,而正确的处理乱序事件,通常用Watermark机制结合window来实现;

1、watermark就是事件时间,代表当前时间的进展
2、watermark主要用来处理乱序数据,一般就是直接定义一个延迟时间,延迟触发窗口操作;这里的延迟,指的是当前收到的数据内的时间戳
3、watermark延迟时间的设置,一般要根据数据的乱序情况来定,通常设置成最大乱序程序度。如果要权衡正确性和实时性的话,可以不按最大乱序程度,而是给一个相对较小的watermark延迟。watermark延迟时间,完全是自己手动设置。
4、关窗操作,必须是时间进展到窗口关闭时间,事件时间语义下就是watermark达到窗口关闭时间
5、watermark代表的含义是,之后就不会再来时间戳比watermark里面的数值小的数据了;如果不同的上游分区,当前任务会对它们创建各自分区watermark,当前任务的事件时间就是最小的那个
6、处理乱序数据,Flink有三重保证
watermark可以设置延迟时间
window的allowedLateness方法,可以设置窗口允许处理迟到数据的时间
window的sideOutputLateData方法,可以将迟到的数据写入侧输出流

窗口有两个重要操作:触发计算,晴空状态(关闭窗口)

watermark的特点
watermark是一条特殊的数据记录
watermark必须单调递增,以确保任务的时间时间时钟在向前推进,而不是在后退
watermark与数据的时间戳相关

watermark的传递
在这里插入图片描述
watermark = maxTimeStamp - laterTime

注:maxTimeStamp:当前时间戳最大的时间。laterTime:延迟时间

在这里插入图片描述
数据比较稀疏时用断点式,数据比较密集用周期性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值