-
WaterMark是什么?
在了解Flink的WaterMark之前先要了解Flink的时间语义。在Flink里面有三种时间语义:
①Even Time:事件创建的时间,时间在数据里面。
②Ingestion Time:数据进入Flink的时间。
③Processing Time:处理数据的本地系统时间。
由于网络或者分布式系统的原因,在进入Flink的数据里面有的数据是乱序的,如果乱序了,要有一种机制来防止乱序数据影响到数据的最后处理结果,那么WaterMark就是避免乱序数据带来的计算不正确的。
WaterMark是一条特殊的数据,它有一个值,比如设定了延迟是一分钟,先在WaterMark已经涨到了10:00了,说明10:00以前的数据都已经到齐了,9:59分的数据就可以发车了。WaterMark必须是单调递增的,它与数据的时间戳有关。
下面通过图示来介绍WAaterMark的传递:
如图所示,在Flink的任务中有四个并行的子任务,它们初始的WaterMark分别是2,4,3,6,然后第一个子任务的WaterMark为4的数据来着,到达之后就更新自己的WaterMak变成4,那么就说明这个子任务的4之前的数据都到了,其他子任务也是一样。 -
WaterMark的引入和设定
引入watermark只需要在数据流里添加一个方法即可:
Flink的WaterMark详解
最新推荐文章于 2025-03-11 22:25:12 发布
