flink的时间语义

前言:

flink中,如果定义一个一小时的时间窗口,并处理这一小时的窗口内的数据,那么这一个小时是怎么定义的呢?换句话说,这个一小时是物理机系统时间还是数据中定义的时间,这时就会用到时间语义。

时间语义(三种):

事件时间(Event Time):

事件时间是数据生成的时间,也是数据的创建时间。比如,在电商平台上,用户对某个商品在10:00下单,这个10十点就是事件事件,这个下单时间也会被上传到日志文件中。

处理时间(Processing Time):

处理时间是物理机系统的时间,处理时间不是根据数据里面记录的时间进行处理,而是会根据你服务器系统的时间进行处理,时间窗口定义了一个一小时的,这个一小时就是你电脑系统上的一小时。而且处理时间没有水位线的概念

注入时间(Ingestion Time):

注入时间是数据进入Source算子的时间。

使用注入时间是一种折中方案,不同于事件时间,不需要使用水位线机制,也意味着他不需要太多的缓存,延迟也较低。相比处理时间,它避免了不同算子处理速度的影响。

水位线&水印(Watermark)机制:

水印(WaterMark)是用于解决实时计算中的数据乱序问题的一种机制。它的本质是在DataStream中一个带有时间戳的元素。水印的出现是为了帮助Flink动态地处理乱序事件,并在保证准确性的同时提供低延迟的数据处理。水印在程序并行度大于1的情况下,Flink会选取时间戳最小的水印。

水位线(WaterLevel)可以看作是一条特殊的数据记录,它被插入到数据流中作为一个标记点,主要内容就是一个时间戳,用来指示当前的事件时间。这个时间戳可以用来产生水印,进而解决延迟、乱序、重发等情况。

在理想情况下,数据应当按照事件时间顺序到达集群节点,但是每一条数据到达集群中,可能会因为网络延迟等问题数据出现乱序,如:5:10 的记录在 5:00的记录的前面。这样的问题改如何解决呢?可以在传输过程中等一等,等数据到达时间窗口后再进行处理,如时间窗口好比一辆班车,这个班车时间是8点到9点,班车等到9点时,发现有部分人还在赶车的路上,司机打算再等个10分钟再走,等到10分钟后,不管有没有上满,班车都会出发。班车是时间窗口,班车时间是定义时间窗口的大小,再等10分钟就是水平线(Watermark)机制,总结一句话来说就是,定义一个1小时的时间窗口用来接收这1小时的数据,这一小时的数据到达后发现,有一些数据没有达到,那就触发Watermark机制,将一小时扩展到一小时十分,接收数据后再进行计算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值