Flink中watermark的作用

watermark是Flink流处理中解决事件乱序的关键机制,它表示事件时间的进展并确保窗口计算的及时性。watermark是单调递增的,并在有界流中确保所有数据被处理。当watermark达到EventTime-1ms时,会触发窗口关闭。在多并行度场景下,watermark取最小值以避免延迟。watermark的设定对于正确处理乱序事件和确保流处理的最终一致性至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 watermark产生的缘由

Flink中流处理从事件产生,到流经source,再到operator,中间是有一个过程和时间的。虽然大部分情况下,流到operator的数据都是按照事件产生的时间顺序来的,但是也不排除由于网络、背压等原因,导致乱序的产生(out-of-order或者说late element)。

但是对于late element,我们又不能无限期的等下去,必须要有个机制来保证一个特定的时间后,必须触发window去进行计算了。这个特别的机制,就是watermark。

2 watermark作用的总结

2.1 概念与理解

1)能够解决乱序的问题

2)表示事件时间的进展

3)表示一个时间戳

4)是单调递增的

5)认为在其之前的数据都处理过

2.2 官方提供的watermark的实现

1)升序时,watermark = EvenTime-1ms

此时 watermark >=EvenTime-1ms会触发关闭窗口的命令

2)乱序时,watermark = EventTime - 等待时间

此时 watermark >=EvenTime-1ms会触发关闭窗口的命令

2.3 watermark的传递,并行度的影响

以多个并行子任务中,watermark以最小的为准(木桶原理)

2.4 有界流的问题

有界流在关闭之前,会把watermark设置为Long的最大值===>目的是为了保证所有窗口能够接收到所有数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值