flink学习记录之水位线

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

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

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

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

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



其中继承自WatermarkGeneratorSupplier

你可能感兴趣的:(flink)