在flink1.13版本中,给事件分配水印,直接在流上,调用时间戳和水印分配策略,传入WatermarkStrategy。
参考官网:
WatermarkStrategy
.<Tuple2<Long, String>>forBoundedOutOfOrderness(Duration.ofSeconds(20))
.withTimestampAssigner((event, timestamp) -> event.f0);
其中,<Tuple2<Long, String>>表示流中数据的类型,比如<User>,表示流是有User对象组成。
Duration.ofSeconds(20)表示,窗口等待时间。如果不需要等待,此处修改为Duration.ZERO。
(event, timestamp),其中event表示事件,timestamp表示当前内部时间戳,如果还没有分配时间戳,则为负值。
这里,可以从event中选择某一个字段,转成时间戳毫秒值返回,也可以使用当前内部时间戳timestamp,或者使用系统当前时间System.currentTimeMillis(),等等。