Flink: разница между MaxOutOfOrderness и AllowedLateness - PullRequest
0 голосов
/ 06 ноября 2019

В Flink есть 2 вещи, которые обеспечивают похожее поведение. В чем разница между ними.

  1. MaxOutOfOrderness : используется с BoundedOutOfOrdernessTimestampExtractor. Позволяет элементам потока быть не в порядке на величину значения maxOutOfOrdeness, задерживая Водяной знак позади времени события на значение MaxOutOfOrderness.
  2. AllowedLateness : Сохраняет состояние окна в течение еще некоторого времени, определенного этим параметром.

Зачем вам использовать AllowedLateness, когда вы уже можете добиться того же поведения с помощью maxOutOfOrderness.

Если вы используете только Allowedlateness, то нет смысла ждать, как поздние элементыбудет не в порядке и, следовательно, будет отброшен.

Если вы используете только MaxOutOfOrderness, то это задержит вычисление окна, но может обработать события не по порядку.

1 Ответ

1 голос
/ 06 ноября 2019

MaxOutOfOrderness определяет, насколько далеко водяной знак для потока отстает от максимальной отметки времени, которая наблюдалась до сих пор - что, в свою очередь, определяет, когда будут срабатывать таймеры событий. Эти таймеры могут принадлежать окнам или функциям процесса.

Водяной знак также определяет, какие события запаздывают - запаздывают события с отметками времени, меньшими, чем у текущего водяного знака.

В оконном API есть понятие допустимая задержка , которая определяет, как долго сохраняется состояние окна. Временное окно события будет срабатывать, когда водяной знак пересекает конечную точку окна, а в случае, когда есть некоторое допустимое запаздывание, окно будет запускаться снова, когда приходит каждое позднее событие, вплоть до истечения разрешенного запаздывания (это может привести к срабатываниюбыть настроенным - это по умолчанию). По истечении допустимого времени ожидания состояние окна очищается, и после этого последние события либо сбрасываются, либо отправляются на побочный выход (если он настроен).

Итак, для суммирования:

AllowedLatenessприменяется только к временным окнам событий, в то время как MaxOutOfOrderness относится ко всем видам использования водяных знаков (например, к функциям процесса).

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

Целью водяных знаков является контроль компромисса между задержкой и полнотой. Полезно иметь возможность требовать, чтобы результаты создавались с низкой задержкой (т. Е. Относительно коротким MaxOutOfOrderness), и в то же время обрабатывать довольно поздние события.

И исправить одно: если MaxOutOfOrderness равен нулю, иесть AllowedLateness, тогда у вас, вероятно, будет много поздних событий (если не все в порядке), но они будут отброшены (окном), если их запаздывание превышает допустимое запаздывание.

...