Короткий ответ: нет, в этом случае окно не станет меньше (и может фактически выдать исключение).
Именно здесь вступает в игру экстрактор водяных знаков BoundedOutOfOrderness .Используя это, вы настраиваете, какие временные метки могут быть «не в порядке», и это сгладит эти расхождения.По умолчанию с экстрактором AscendingTimestamp фактически было бы ошибкой получать метки времени, которые вышли из строя.
Кроме того, существует понятие «допустимая задержка», которое определяет, что происходит в случае, когда вы получаете отметки времени, которые ниже текущего водяного знака.
Например, если вы знаете, что ваш источник данных может иметь джиттер в 60 секунд (из-за задержек во время обработки, географического расстояния и т. Д.), Вы можете использовать ограниченный извлеченный из порядка извлечение со значением(TimeUnit.SECONDS, 60)
, что эффективно сдвинет все ваше окно назад на 60 с.Это позволит элементам располагаться в любом порядке в течение 60-х годов друг от друга.
Однако, если вы действительно ожидаете, что элементы будут приходить либо в точном порядке, либо с очень небольшим джиттером, но вы хотите принимать поздние элементы для обработки, вы можете использовать настройки Allowed Lateness чтобы определить, как должен вести себя ваш процесс при поступлении этих элементов. По умолчанию Flink просто удалит их, но вы можете настроить период времени, в течение которого Flink будет повторно запускать ваше окно для каждого входящего элемента.
Фундаментально все это зависит только от вашей конкретной ситуации, от того, насколько нервно и поздно вы ожидаете поступления данных, а также от того, как вы справляетесь с поздними элементами.Flink в значительной степени учитывает любую комбинацию настроек здесь.