欢迎光临散文网 会员登陆 & 注册

详解WatermarkStrategy在Flink中的两种使用方式

2023-08-17 16:56 作者:ingemar-  | 我要投稿

在Flink1.11中就已经发现assignTimestampsAndWatermarks的有些实现过渡了,从Flink1.12版本开始,官网推荐用WatermarkStrategy


背景

在flink 1.11之前的版本中,提供了两种生成水印(Watermark)的策略,分别是AssignerWithPunctuatedWatermarks和AssignerWithPeriodicWatermarks,这两个接口都继承自TimestampAssigner接口

但是用户想要使用不同的水印生成方式,则需要实现不同的接口,这样就引发了一个问题,对于想要给水印添加一些通用的、公共的功能则变得复杂,因为我们需要同时给这两个接口添加新的功能,这样还造成了代码的重复。

所以为了避免代码的重复,在flink 1.11中对flink的水印生成接口(WatermarkStrategy)进行了重构。


Watermark应用代码结构

WatermarkStrategy在Flink中有两种使用方式:

一种是直接在数据源上使用

另一种是直接在非数据源的操作之后使用

推荐使用第一种方式,因为数据源可以利用watermark生成逻辑中有关分片/分区的信息。使用这种方式可以更精准的跟踪watermark,整体的watermark生成将更精准,直接在数据源指定watermarkStrategy必须使用特定的数据源接口,例如与kafka链接,使用kafka Connerctor,只有当无法直接在数据源上设置策略时才使用第二种方式

在数据源直接使用时如果因为数据源中的任何一个分区/分片在一段时间内未发送事件数据,则意味着watermarkStrategy也不会获得数据去生成watermark,在这种情况下可以通过设置有一个空闲时间,当超过这个时间则将该分片或分区标记为空闲状态。



详解WatermarkStrategy在Flink中的两种使用方式的评论 (共 条)

分享到微博请遵守国家法律