Flink时间语义

2022/02/25

Tags: Flink

摘要: 理解流处理中的时间语义,处理时间和事件时间。


stream-time

如图,在无界数据中,随着时间推移,数据一直产生,但真实情况中,往往在一段时间内的数据都是不均匀的,往往会出现意外的情况,比如在地铁无信号的情况下,数据虽然产生,但是会有一段时间延迟才会到达消息队列,例如虚线框中的数据。

处理时间

处理时间就是流计算处理程序的机器本地时间,按照这种时间语义,在流计算的时间窗口中,上述例子中的数据会按这样分布:

process-time

基于本地时间,在第一分钟,流处理程序只收到了 1518 两个数据,后续数据由于网络原因,在 8:01:00 之后才到达流计算程序,所以后续数据在下一个时间窗口内。

事件时间

事件时间就是事件的发生时间,这个时间通常会在数据中,按照这种时间语义,在流计算的时间窗口中,上述例子中的数据会按这样分布:

event-time

基于事件时间,在第一分钟,数据应该是:15 18 9 10 ,在第二分钟,数据应该是:11

watermark

由于事件时间的窗口和事件相关,那么如果下一个事件还未到达,流计算程序是否就无限等待呢?

为了解决这个问题,flink 引入 watermark 的概念,假如定义 watermark 为 T,那么在每一个时间窗口中,T 都会单调递增 T < T1,并且下一个时间窗口中的事件时间必须大于 T1,那么每一个时间窗口的数据就是介于 T-T1