Flink 水位线

水位线是什么

窗口 有了,但是要知道我们面对的是实时数据,而这些数据随时会出现延迟的情况,从几秒到几小时都有可能。如果要忽略这些数据,那么显然对于结果的计算是不准确的,可是要等待这些延迟数据的话, 那岂不是等同于批处理了,我们等不了那么久的。这个时候水位线恰好就是来描述和解决这个问题的。它指定一个时间 T,表示时间 T 之前的数据已经全部到达,后续再迟到的数据会被直接丢弃。

水位线用在哪里

显然,使用处理时间来处理事件不会有延迟,因此也不需要水位线。所以水位线只出现在事件时间窗口,因而也可以将水位线看成是事件时间的进度条。通常,当水位线通过窗口的末尾时,会触发窗口的计算操作。

在 Flink 中如何产生水位线

在 data source 中发射水位线

即在 data source 函数中,使用 SourceContext 的 emitWatermark 方法来发射一个水位线 T。

使用水位线生成器

  1. 按照固定周期生成
    这种情况下,Flink 会定时(可以自定义)获取水位线,这里水位线的具体方法由用户实现。
  2. 从特定元素生成
    在数据流中有某种中止信号(如-1、EOF)的时候,特别有用。此外需要注意的是由于这种获取水位线的操作会作用于每一个元素,所以可能会带来性能影响。

并发中的水位线

关于水位线的使用,有两点需要知道:

  1. 水位线是单调递减的,也就是说不允许后出现的水位线比之前的小。
  2. 当有操作依赖于多个流或者并发集合时,该操作会依赖于之前的所有水位线中最小的那个,也就是说该操作可能会等到之前所有的操作的水位线都通过了窗口的末尾,才会触发。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值