理解Watermark的传输机制至关重要

要理解watermark的传输机制,首先我们先再来回顾下watermark的定义,理清它是用来解决什么问题的。Flink里涉及两个重要的时间,Processing Time(处理时间) 和 Event Time(事件时间),而支持事件时间的流处理器需要一种方法来度量事件时间的进度,也就是说我们需要知道当前数据处理到哪里了。而watermark就是一个时间戳t,一个Watermark(t)表示在这个流中事件时间已经到达t,这意味着所有携带时间戳t'<=t的元素都已经到达,Watermark(t)后的元素的时间戳都应该 >t。即它定义了何时不再等待更早的数据。

watermark的传递机制概括起来就是:

上游算子的所有subtask(并行度)都广播自己的watermark给下游算子(注意当上下游通过 Forward策略直连(并行度相同),Watermark仅传递给下游对应索引的 subtask(非广播)),下游算子接收所有上游算子发来的所有watermark,然后取值一个最小的watermark。subtask如果没数据读入,则无法更新自己的watermark,则默认值就是Long.MIN_VALUE(这里我们也叫不产生watermark,因为效果是一致的),这会导致下游算子watermark无法推进,因为一直是Long.MIN_VALUE。可以在flink web ui里点击对应operator的Metrics里选择watermark查看具体值,可以看到各个subtask的输入watermark、当前watermark、输出watermark。

为什么一定要广播呢,因为算子的多个实例(按当前算子的并行度生成subtask)分别会处理不同的数据,产生不同的watermark,如果不广播给下游算子,下游算子又不取值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

sf_www

谢谢支持

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

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

打赏作者

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

抵扣说明:

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

余额充值