Apache Flink: триггер не срабатывает при использовании BoundedOutOfOrdernessTimestampExtractor

При использовании BoundedOutOfOrdernessTimestampExtractor триггер не срабатывает. Однако триггер срабатывает при использовании настраиваемого средства извлечения меток времени с аналогичным водяным знаком.

Пример кода ниже: 1.Assigner as anonymous class, который отлично работает

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. назначитель BoundedOutOfOrdernessTimestampExtractor, который не работает

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

Вы видите разницу в подходах?


person wittyameta    schedule 11.01.2018    source источник


Ответы (1)


Ответ скопирован из рассылки flink список:

Разница в том, что водяные знаки из BoundedOutOfOrdernessTimestampExtractor основаны на самой большой временной метке из всех предыдущих событий. То есть, если вы не получаете новых событий, водяной знак не продвигается. Напротив, ваша пользовательская реализация AssignerWithPeriodicWatermarks всегда продвигает водяной знак на основе настенных часов.

Поскольку я использовал небольшой статический набор событий, водяной знак не продвигался при использовании BOOTE.

person wittyameta    schedule 12.01.2018