顺序流生成水印
在 Flink 中,可以通过实现 AssignerWithPeriodicWatermarks
或 AssignerWithPunctuatedWatermarks
接口来为您的数据源分配时间戳和水印。以下是 AssignerWithPeriodicWatermarks
的示例代码,它会周期性地为数据源中的每个事件分配时间戳和水印:
public class CustomTimestampExtractor implements AssignerWithPeriodicWatermarks<MyEvent> {
private long currentMaxTimestamp;
private long maxOutOfOrderness;
public CustomTimestampExtractor(Time maxOutOfOrderness) {
this.maxOutOfOrderness = maxOutOfOrderness.toMilliseconds();
this.currentMaxTimestamp = Long.MIN_VALUE + maxOutOfOrderness;
}
@Nullable
@Override
public Watermark getCurrentWatermark() {
return new Watermark(currentMaxTimestamp - maxOutOfOrderness);
}
@Override
public long extractTimestamp(MyEvent event, long previousElementTimestamp) {
long timestamp = event.getTimestamp();
cur