MaxOutOfOrderness определяет, насколько далеко водяной знак для потока отстает от максимальной отметки времени, которая наблюдалась до сих пор - что, в свою очередь, определяет, когда будут срабатывать таймеры событий. Эти таймеры могут принадлежать окнам или функциям процесса.
Водяной знак также определяет, какие события запаздывают - запаздывают события с отметками времени, меньшими, чем у текущего водяного знака.
В оконном API есть понятие допустимая задержка , которая определяет, как долго сохраняется состояние окна. Временное окно события будет срабатывать, когда водяной знак пересекает конечную точку окна, а в случае, когда есть некоторое допустимое запаздывание, окно будет запускаться снова, когда приходит каждое позднее событие, вплоть до истечения разрешенного запаздывания (это может привести к срабатываниюбыть настроенным - это по умолчанию). По истечении допустимого времени ожидания состояние окна очищается, и после этого последние события либо сбрасываются, либо отправляются на побочный выход (если он настроен).
Итак, для суммирования:
AllowedLatenessприменяется только к временным окнам событий, в то время как MaxOutOfOrderness относится ко всем видам использования водяных знаков (например, к функциям процесса).
Полезно иметь оба механизма, потому что у вас могут быть окна, которые запускаются как в естественном конце окна, как определено водяными знаками, так и снова с обновленными результатами по мере поступления поздних событий.
Целью водяных знаков является контроль компромисса между задержкой и полнотой. Полезно иметь возможность требовать, чтобы результаты создавались с низкой задержкой (т. Е. Относительно коротким MaxOutOfOrderness), и в то же время обрабатывать довольно поздние события.
И исправить одно: если MaxOutOfOrderness равен нулю, иесть AllowedLateness, тогда у вас, вероятно, будет много поздних событий (если не все в порядке), но они будут отброшены (окном), если их запаздывание превышает допустимое запаздывание.