Apache Flink: водяные знаки, отбрасывание поздних событий и допустимая задержка - PullRequest
1 голос
/ 09 мая 2019

У меня проблемы с пониманием концепции водяных знаков и допустимого опоздания.

Ниже приведена выдержка из [почтового архива|https://www.mail-archive.com/user@flink.apache.org/msg08758.html] , в котором говорится о водяных знаках, но у меня естьеще пара вопросов.Ниже приведен пример цитирования.:

Предположим, у вас есть BoundedOutOfOrdernessTimestampExtractor с 2-минутным ограничением и 10-минутным акробатическим окном, которое начинается в 12:00 и заканчивается в 12: 10:

Если у вас есть следующая последовательность потоков:

12:01, A
12:04, B
WM, 12:02 // 12:04 - 2 minutes
12:02, C
12:08, D
12:14, E
WM, 12:12
12:16, F
WM, 12:14 // 12:16 - 2 minutes
12:09, G

нет допустимых задержек

Оператор окна пересылает логическое время в 12:12, когда он получает<WM, 12:12> и оценивает окно, которое содержит [A, B, C, D] в это время, и, наконец, очищает его состояние.<12:09, G> позднее игнорируется.

допустимая задержка в 3 минуты

Оператор окна вычисляет окно при получении <WM, 12:12>, но его состояние еще не очищено,Состояние очищается при получении <WM, 12:14> (время срабатывания окна 12:10 + допустимое опоздание на 3 минуты).<12:09, G> снова игнорируется.

допустимая задержка в 5 минут

Оператор окна вычисляет окно при получении <WM, 12:12>, но его состояние еще не очищено,При получении <12:09, G> окно снова оценивается, но на этот раз с [A, B, C, D, G] и отправляется обновление.Состояние очищается при получении водяного знака> = 12:15.

Как я понимаю:

  1. Водяной знак должен сообщать, что любой элемент, который приходит сотметка времени события меньше, чем у водяного знака, будет сброшена.Таким образом, водяной знак 12:02 означает, что Флинк видел все, что должен был увидеть до времени события 12:02.Любой элемент, имеющий временной интервал события меньше этого водяного знака, например 12:01, будет отброшен.
  2. Понятие «Допустимая задержка» применяется только после последнего водяного знака, отмечающего конец окна

Мои вопросы основаны на понимании:

  1. Как развивается сообщение "12: 02, C", учитывая, что Flink с предыдущим водяным знаком (WM, 12:02) уже сказал " Я видел все до времени события 12: 02"?
  2. Я настроил последовательность потоков и вставил еще одну запись 12: 01, CCC в точке, как показано ниже жирным шрифтом в последовательности потоков.

Если у вас следующая последовательность потоков:

12:01, A
12:04, B
WM, 12:02 // 12:04 - 2 minutes
12:02, C
 12:01, CCC // Inserted by Sheel
12:08, D
12:14, E
WM, 12:12
12:16, F
WM, 12:14 // 12:16 - 2 minutes
12:09, G

Это все еще в окне 12: 00-12: 10, но за водяным знаком WM, 12:02.Допустим, допустимая задержка составляет 5 минут.Будет ли эта запись принята «каким-то образом», привнося в картину допустимое опоздание, или она будет отброшена, учитывая, что водяной знак 12:02 уже пересек?

1 Ответ

1 голос
/ 09 мая 2019

Watermarks управляет временем жизни окна, но не напрямую, независимо от того, была ли удалена запись или нет.Когда Флинк WindowOperator получает новую запись, он вычисляет набор окон, в которые он попадает.Если этот набор содержит хотя бы одно активное окно, а это означает, что нет водяного знака с более высоким значением, чем время окончания окна + допустимая задержка, запись будет назначена этому окну и станет частью вычисления окна (даже если записьотметка времени ниже, чем последний увиденный водяной знак).Следовательно, можно сказать, что окна уменьшают разрешение водяных знаков по отношению к отдельным записям.

В вашем случае это означает, что и C, и CCC станут частью окна 12:00 - 12:10, так каксистема еще не видела Watermark с> = 12:10.

...