几分钟明白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<>())实现侧输出
  • ③ 根据迟到的事件更新并发出结果
    其实就是水位线不一定能解决全部延迟数据,主要是处理毫秒内的数据延迟,延迟过大的数据会有剩余方案进行处理~
  • 若还有别的疑问欢迎留言~🤗,有说错之处还请指出🤨
  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每日小新

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值