4个角度轻松理解 Flink中的Watermark

本文通过实例解析Flink中的Watermark概念,解释在事件时间处理中,为何需要watermark来定义不再等待更早数据的时机,并探讨了watermark的生成策略,帮助理解Flink处理乱序事件的机制。
摘要由CSDN通过智能技术生成

目录

有缓存就必然有延迟

必须勇敢地输出排序流的第一个结果

watermark 定义了何时不再等待更早的数据

设想不同的策略来生成 watermark


当我们第一次接触 Flink 时往往会对其中的 watermark 感到困惑。但实际上 watermark 并不复杂。在本文中我们将通过一个简单的例子来说明为什么需要水印以及它们如何工作。

在下文中的例子中,我们有一个带有时间戳的事件流,但是由于某种原因流中的事件并不是按顺序到达的。图中的数字代表事件发生的时间戳(Event-time)。第一个事件在时间4达到,它后面跟着的是发生在更早时间(时间 2)的事件,以此类推:

注意这是一个按照事件时间(Event-time)处理的例子,上面所述的时间戳所表示的是事件真实发生时间,而非事件处理的时间(Processing-Time) 。事件时间(Event-Time)处理的强大之处在于,无论是在处理当前的数据还是重新处理历史(数据重放)的数据,基于事件时间创建的流计算应用都可以保证最终执行结果是一致的。

假设我们现在正在尝试创建一个流计算排序算子。即将一个乱序到达的事件流按照事件时间进行顺序输出。数据流中的第一个元素的事件时间是 4,但是我们不能直接将它作为排序后数据流的第一个元素进行输出。因为数据是乱序到达的,也许有一个更早发生的数据还没有到达。实际上,我们在上面的例子中可以提前预知到这个流中元素2 的事件事件比4更早,我们的排序算子至少要等到 2 这条数据的到达后再做输出。

有缓存就必然有延迟

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值