Flink Watermarking глобальный? - PullRequest
       6

Flink Watermarking глобальный?

0 голосов
/ 19 февраля 2019

Предположим, у меня есть два разных потока данных, используя время события.

class TSWM implements AssignerWithPunctuatedWatermarks<POJO> {
   long maxTS = Long.MIN_VALUE;
   @Override
  public Watermark checkAndGetNextWatermark(POJO event, long l) {
    maxTS = Math.max(maxTS, event.TS);
    return new Watermark(getMaxTimestamp());
  }

  @Override
  public long extractTimestamp(POJO event, long l) {
    maxTS = Math.max(maxTS, event.TS);
    return event.TS;
  }
}

DataStream<POJO> ds1 = ... .assignTimestampsAndWatermarks(new TSWM())

DataStream<POJO> ds2 = ... .assignTimestampsAndWatermarks(new TSWM())

Так что теперь у меня есть два разных потока данных, мойвопрос в том, являются ли метки времени и водяные знаки отдельными для каждого потока данных или это централизованные часы?

Я делаю некоторые другие сложные оконные операции и переназначение меток времени и водяных знаков, и они не создают оконных данных, поэтому у меня возникло ощущение, что водяные знаки или метки времени являются проблемой.

1 Ответ

0 голосов
/ 19 февраля 2019

Водяные знаки, в некотором смысле, являются «глобальными», но со следующими оговорками:

  1. каждый параллельный экземпляр assignTimestampsAndWatermarks делает свой собственный водяной знак
  2. , когда оператор соединяет два потока(например, функция CoProcessFunction), ее водяной знак является минимумом входящих водяных знаков
  3. , с Kafka, который вы можете организовать для водяного знака на каждый раздел kafka
...