Flink: добавить событие в конец конечного DataStream - PullRequest
0 голосов
/ 14 февраля 2019

Предполагается, что существует конечный DataStream (например, из источника базы данных) с событиями

  • a1, a2, ..., an.

Как добавить еще одно событие b в этот поток, чтобы получить

  • a1, a2, ..., an, b

(т.е. вывести добавленное событиепосле всех исходных событий, сохраняя исходный порядок)?

Я знаю, что все конечные потоки испускают MAX_WATERMARK после всех событий.Итак, есть ли способ «перехватить» этот водяной знак и вывести дополнительное событие после него?

(К сожалению, .union() использование исходного DataStream с другим DataStream, состоящим из одного события (с отметкой времени, установленной на Long.MaxValue), а затем сортировка объединенного потока с использованием этот ответ не сработал.)

Ответы [ 2 ]

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

Другой подход может заключаться в том, чтобы «обернуть» исходный источник данных в другой источник данных, который испускает последний элемент, когда возвращается метод run() объекта делегата.Конечно, вам нужно быть осторожным при обращении ко всем методам делегата.

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

Может быть, я что-то упускаю, но кажется, что вы могли бы просто иметь ProcessFunction с таймером времени события, установленным где-то в далеком будущем, чтобы он срабатывал только тогда, когда прибывает MAX_WATERMARK.А затем в методе onTimer создайте это специальное событие, если currentWatermark имеет значение MAX_WATERMARK.

...