Flink WaterMark水位线(水印)的深入理解

1,最近看书,结合一些视频,对水印的原理完全的理清楚了,也是个搬运工行为吧,希望做个总结,防止遗忘。

 

我们首先得知道watermaker的作用:

1)非常重要的作用是解决数据乱序的,如果你的数据是有序的,使用它意义不大

 

2)到了窗口关闭时间而不是立马触发窗口计算,而是等待一段时间,等迟到的数据进来。

我们看下图代码就可以知道:

 

Flink WaterMark水位线(水印)的深入理解

 

所以要触发水印,总结就是为2个条件:

1)watermark时间 >= window_end_time
2)在[window_start_time,window_end_time)中有数据存在

还是举个例子:

如下图,我们只要水位线到了哪里,就到代表水位线之前的数据都到了,这个时候的window窗口就需要关闭了。

Flink WaterMark水位线(水印)的深入理解

3)水位线的传递

如下图解释:

加入输入有4个分区,输出是3个分区,每个分区都有自己的水位线,因为水位线是单调递增的,如果新的水位线来了会替换掉原来的水位线,但是输出的水位线是基于输入分区最小的水位线的,所以在1 和 2 图中我们发现输出的水位线变了,变成了4个分区里面值最小的3。

Flink WaterMark水位线(水印)的深入理解

包括多条流join  union 都是一样的,取分区水位线最小的值作为输出的水位线值

4)水位线策略和类型

Flink WaterMark水位线(水印)的深入理解

 

Flink WaterMark水位线(水印)的深入理解

 

水位线的两种类型 ,一个是周期性,一个是非周期性,自己百度就明白了:

Flink WaterMark水位线(水印)的深入理解