Apache flink Flink水印:通过实现水印生成器发送水印的频率

Apache flink Flink水印:通过实现水印生成器发送水印的频率,apache-flink,Apache Flink,我在官方指南中看到了以下示例 public class BoundedOutOfOrdernessGenerator implements WatermarkGenerator<MyEvent> { private final long maxOutOfOrderness = 3500; private long currentMaxTimestamp; @Override public void onEvent(MyEvent event,

我在官方指南中看到了以下示例

public class BoundedOutOfOrdernessGenerator implements WatermarkGenerator<MyEvent> {

    private final long maxOutOfOrderness = 3500; 

    private long currentMaxTimestamp;

    @Override
    public void onEvent(MyEvent event, long eventTimestamp, WatermarkOutput output) {
        currentMaxTimestamp = Math.max(currentMaxTimestamp, eventTimestamp);
    }

    @Override
    public void onPeriodicEmit(WatermarkOutput output) {
        
        output.emitWatermark(new Watermark(currentMaxTimestamp - maxOutOfOrderness - 1));
    }

}
公共类BoundedAutofordernessGenerator实现水印生成器{
专用最终长最大输出顺序=3500;
私有长currentMaxTimestamp;
@凌驾
public void onEvent(MyEvent事件、长事件时间戳、水印输出){
currentMaxTimestamp=Math.max(currentMaxTimestamp,eventTimestamp);
}
@凌驾
public void onPeriodicEmit(水印输出){
emitWatermark(新水印(currentMaxTimestamp-maxOutOfOrderness-1));
}
}

允许的最大迟到时间为3.5秒。这是否意味着这将每3.5秒发送一个水印?如果没有,我不明白
onEvent
实现中的时间戳比较点是什么。

boundedAutofordernessGenerator的
onEvent
方法正在跟踪流中迄今为止看到的最大时间戳。基于流最多是无序的假设,在看到值为
currentMaxTimestamp
的时间戳后,我们假设时间戳小于
currentMaxTimestamp-maxOutOfOrderness-1
的所有事件现在应该已经到达

onPeriodicEmit
autoWatermarkInterval
毫秒调用一次,默认为200毫秒

Math.max
确保
currentMaxTimestamp
不会倒退