0


几分钟明白Flink水位线

Flink水位线


1、Flink中不同的事件概念

  • Processing time(处理时间): 即事件被机器处理的时间,事件流向某个算子的系统时间
  • Event Time(事件时间): 事件时间是再某个生产设备上发生时间,指事件进入Flink之前嵌入的时间,通常可以从事件中获取一个时间戳,此时间戳可以用来得出水位线,进而解决延迟,乱序,重发等情况
  • Ingestion time(摄入时间): 摄入时间即是事件进入Flink的时间,是在Source Operator中设置的。

2、WaterMark(水位线)

水位线,首先水位线的主要作用是解决数据的延迟和乱序问题,水位线到底是什么?水位线其实可以理解是一个特俗的数据,用来延迟窗口的触发(此处指的窗口每个相互独立),具体情况,下图说明。

在这里插入图片描述


假设场景,比如说上学校车,校车每天早上九点发车,但有一部分学生可能九点零二才能赶来,于是小明偷偷把司机的时间调后了两秒,这样当时间到了九点(延后两秒的九点)大家都能上车了。


**

初学者:疑难点(误区)

**

  • ① 水位线如何得出? 水位线公式:watermark=当前最大事件时间-延迟时间,此公式最后的结果水位线其实代表了前多少个数据已经到齐了,每个数据进入,都会抽取数据的时间戳(事务时间)来生成一个水位线
  • ② 事件时间和数据容易分不清(或者混为一谈) 上面有讲事件时间,开始数据可能是有序的,但经过并行的处理过程中,数据难免会乱序,图中很容易看出③ 窗口的大小并不代表窗口处理几条数据 窗口大小两种要么是根据时间,要么根据处理数据个数,视情而定,不要搞混。④ 窗口5s秒的理解 窗口五秒大小范围是【0,5)。

3、WaterMark的迟到数据

现实中很难生成一个完美的水位线,水位线就是在延迟与准确性之前做的一种权衡。那么,如果生成的水位线过于紧迫,即水位线可能会大于后来数据的时间戳,这就意味着数据有延迟,关于延迟数据的处理,Flink提供了一些机制,具体如下:

  • ① 直接将迟到的数据丢弃
  • ② 将迟到的数据输出到单独的数据流中,即使用sideOutputLateData(newOutputTag<>())实现侧输出
  • ③ 根据迟到的事件更新并发出结果其实就是水位线不一定能解决全部延迟数据,主要是处理毫秒内的数据延迟,延迟过大的数据会有剩余方案进行处理~
  • 若还有别的疑问欢迎留言~🤗,有说错之处还请指出🤨
标签: Flink watermark

本文转载自: https://blog.csdn.net/llAl_lAll/article/details/123222184
版权归原作者 每日小新 所有, 如有侵权,请联系我们删除。

“几分钟明白Flink水位线”的评论:

还没有评论