ApacheFlink:使用BoundedAutoFordernessTimestampExtractor时未触发触发器

hc8w905p  于 2021-06-25  发布在  Flink
关注(0)|答案(1)|浏览(311)

当使用BoundedAutoFordernessTimestampExtractor时,触发器不会触发。但是,当使用具有类似水印的自定义时间戳提取器时,触发器将触发。
下面的示例代码:1.assigner作为匿名类,工作正常

AssignerWithPeriodicWatermarks<Tuple2<Rule, T>> assigner = new AssignerWithPeriodicWatermarks<Tuple2<Rule, T>>() {
  @Override
  public long extractTimestamp(Tuple2<Rule, T> element, long previousElementTimestamp) {
    return System.currentTimeMillis();
  }

  @Override
  public final Watermark getCurrentWatermark() {
    return new Watermark(System.currentTimeMillis()-100);
  }
};

2.BoundedAutoFordernessTimestampExtractor赋值器不工作

AssignerWithPeriodicWatermarks<Tuple2<Rule, T>> assigner = new BoundedOutOfOrdernessTimestampExtractor<Tuple2<Rule, T>>(Time.milliseconds(100)) {
  @Override
  public long extractTimestamp(Tuple2<Rule, T> element) {
    return System.currentTimeMillis();
  }
};

你觉得这两种方法有什么不同吗?

w6lpcovy

w6lpcovy1#

答案从flink邮件列表中复制:
不同之处在于,BoundedAutoFordernessTimestampExtractor中的水印基于所有先前事件中的最大时间戳。也就是说,如果您没有收到新事件,水印将不会前进。相反,带有周期性水印的赋值器的自定义实现总是基于挂钟推进水印。
因为我使用的是一个小的静态事件集,所以在使用boote时水印没有前进。

相关问题