Flink中的时间属性总结

1. 时间属性分类

Flink中的时间属性总结

上图为2中时间属性的对比。Processing Time处理起来简单,而处理结果(或者说流处理应用的内部状态)是不确定的。而Event Time在Flink内部做了各种保障,无论重放数据多少次,都能得到一个相对确定的可重现的结果。

2. 应用中如何选择时间属性

遵循以下原则:

当应用遇到某些问题时,要从上一个checkpoint或者savepoint进行重放时,是不是希望结果完全相同。

(1)如果希望结果完全相同,则只能用Event Time。

(2)如果可以接受不同,则可以用Processing Time。

3. 时间的特性

Flink中的时间属性总结

 

4. watermark

在使用Event Time(Record Timestamp)的时候,由于网络、程序内部逻辑、或其他分布式系统的原因,数据的时间可能存在乱序。如下图的例子

Flink中的时间属性总结

这时候我们需要去处理,对于单条数据,考虑对整个序列进行更大程度的离散化。就是按照一定的数据条数分成一些小批次,分小批次主要是为了对他们进行时间上的划分。经过这样的离散化之后,得到的结果是最右边框里的时间一定会小于中间框里的时间,中间框里的时间小于最左边框里的时间。如下图

Flink中的时间属性总结

如上图,我们在整个时间序列里插入标志位的特殊处理数据,这些特殊处理数据就叫watermark。一个watermark本质上代表了它所包含的timestamp数据,表示以后到来的数据已经再也没有小于或等于这个时间的了。