flink学习记录之水位线

本文详细介绍了Flink中的水位线概念,包括其工作原理、水位线生成的源码分析,以及不同WatermarkGenerator的实现,如BoundedOutOfOrdernessWatermark。还讨论了如何在Flink SQL中自定义水位线机制,并提到了withIdleness方法在处理空闲流状态中的作用。通过对水位线的深入理解,有助于优化Flink的窗口计算和乱序事件处理。

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

水位线的概念理解及工作原理:

watermark是用于处理由于网络、背压等原因产生的乱序事件,窗口结束时间+延迟时间=最大waterMark值,即当waterMark值大于的上述计算出的最大waterMark值,该窗口内的数据就属于迟到的数据,无法参与window计算;代码中生成水位线的时间(即调用assignTimestampsAndWatermarks(WatermarkStrategy<T>watermarkStrategy)方法的时间)可为source之后,也可为使用算子之后,。

真实的项目中不光要考虑延迟时间,还要考虑长时间无数据无法触发计算的情况。

生成水位线的源码解析(flink1.11版本之后):

WatermarkStrategy接口继承了接口TimestampAssignerSupplier<T>以及接口WatermarkGeneratorSupplier<T>。其中TimestampAssignerSupplier<T>中的一个方法createTimestampAssigner(Context context) 返回一个TimestampAssigner对象,这个对象中有一个longextractTimestamp方法,作用是从Flink消费的记录中抽取时间,既可以理解为我们如果要通过业务时间进行统计时,需要通过该方法来提取记录的业务时间。所以用到业务时间的话,一定要根据自己的业务场景对该方法进行具体的实现。否则Flink会提供一个默认的实现RecordTimestampAssigner<>()(默认直接返回记录里边的时间)。

 
 

其中继承自WatermarkGeneratorSupplier<T&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值