实时数据开发|简单理解Flink流计算中解决乱序的机制--水位线

今天继续学习Flink的关键机制–水位线,虽然看文字有种浮于表面、难以理解的感觉,但是我觉得等开发中使用到的时候就会融会贯通了。

定义

Fink 相比其他流计算技术的一个重要特性是支持基于事件时间(event time)的窗口操作。但是事件时间来自于源头系统,网络延迟、分布式处理以及源头系统等各种原因导致源头数据的事件时间可能是乱序的。水位线就是用来解决和衡量这种乱序的问题。

[!NOTE] “水位线”(Watermark)定义
用来衡量事件时间进展的标记,说白了就是事件时间戳
一个水位线的时间戳声明任何 event time t’<t 的时间已经到达了。

  • 有序流就是处理时间和事件时间相等,数据会按照生成的先后顺序,每条数据产生一个有先后顺序的水位线。这是一种理想的状态(数据量较小)。

  • 在实际生产中,由于多服务之间网络传输等的因素,处理时间总是大于事件时间,往往数据流是先后错乱,这就是乱序流

由于数据是乱序的,为了让窗口能够正确的收集到迟到的数据,需要让窗口等上一段时间,即在数据的时间戳基础上加上一些延迟来尽量保证不丢数据。
在这里插入图片描述

— 水位线是Flink流处理中保证结

Flink处理乱序流时,通过水位线(Watermark)来确定事件时间窗口的边界。水位线是由WatermarkGenerator生成的,它根据事件的时间戳生成水位线。在乱序流中,水位线的时间戳实际上是当前最大时间戳减去延迟时间减去1毫秒。这是因为水位线的特点是,时间戳为t的水位线表示时间戳小于等于t的数据已经全部到达,不会再有新的数据到来。如果考虑有序流,即延迟时间为0的情况,当时间戳为7秒的数据到达时,之后仍然有可能继续到达7秒的数据,因此生成的水位线不是7秒,而是6秒999毫秒,以便继续接收7秒的数据。\[3\] #### 引用[.reference_title] - *1* [Flink流计算编程--watermark(水位线)简介](https://blog.youkuaiyun.com/lmalds/article/details/52704170)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Flink水位线](https://blog.youkuaiyun.com/qq_51235856/article/details/129012722)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值