FLINK:水位线的介绍
本文重点
在前面的一节课程中我们学习了时间语义,其中有一个关键问题:
分布式的Flink如何保证时间的统一?
系统时间肯定是无法保证的,一定会有偏差,此时Flink引入了水位线的概念,水位线类似于一个逻辑时间,它依赖流中数据的事件事件来推动,从而保证分布式中每个节点都可以保证事件的统一,本文对此进行学习。
节点的时间
假设:单任务执行。数据都是顺序到达的,就是说时间1产生的数据一定比时间2到达的节点早,这是一种非常理想的情况。
在前面窗口课程中,我们介绍了一个温度传感器的例子。那么窗口是如何来进行时间计算的呢?换句话来说,flink怎么知道窗口[0,10)结束了,是时候开启下面一个窗口[10,20)?
总不能是设定一个开始值,然后各个节点的系统时间开始计时,10分钟后就关闭[0,10),然后开启[10,20)?
此时会有两个问题,一个是分布式节点之间如何校时?另一个是数据由于网络传输慢导致错过窗口的问题?
Flink此时根据数据的事件时间来计算当前时间,而不是系统的节点时间,举例来说:
当数据1到达的时候,Flink设定当前的时间为1。
当数据9到达的时候,Flink设定当前的时间为9。
当数据10到达的时候,Flink设