Flink ProcessFunction onTimer первое событие LONG.MIN_VALUE - PullRequest
0 голосов
/ 07 августа 2020

У меня есть вариант использования: stepA -> stepB -> step C ... Теперь мне нужно использовать функцию процесса Flink для отслеживания дорожки. например, как только поступает stepA, я устанавливаю таймер через 10 секунд после A, и когда прошло 10 секунд, этот таймер запускается, и мы проверяем наше состояние, чтобы увидеть, появился ли stepB. Но вот проблема: я использую время события с AssignerWithPunctuatedWatermarks. Но когда я печатаю context.timeservice (). Currentwatermark () на шаге A, он показывает LONG.MIN_VALUE. А водяной знак шага B - это отметка времени A. Я знаю, что это связано с

  public long extractTimestamp(
      MyEvent event, long previousElementTimestamp) {
      return event.getTimeStamp();
  }
  
  public Watermark checkAndGetNextWatermark(
      MyEvent event, long extractedTimestamp) {
    return new Watermark(extractedTimestamp);
  }

Но что еще я могу сделать? Спасибо

1 Ответ

0 голосов
/ 07 августа 2020

Способ, которым Flink применяет водяные знаки, заключается в том, что водяные знаки следуют за событиями, которые использовались в качестве доказательства для создания водяного знака. Таким образом, текущий водяной знак будет LONG.MIN_VALUE во время обработки первого события, после чего водяной знак будет расширен.

Из того, чем вы поделились, неясно, почему это проблема для вашего application.

Между прочим, ваш генератор водяных знаков предполагает, что ваши события строго упорядочены по метке времени. Это правда?

...