Водяные знаки и windows тесно связаны, но это очень разные понятия.
Водяные знаки необходимы для любого вида агрегации на основе событий, чтобы обрезать поздние события. Windows может закрываться только тогда, когда они получают соответствующий водяной знак, и именно тогда публикуются результаты агрегирования.
Если у вас нет неупорядоченных событий, вы можете установить водяные знаки равными временным меткам входных событий. Но это, как правило, роскошь.
изменить, чтобы ответить на вопросы в комментариях.
Это правило большого пальца, чтобы сохранить длительность водяных знаков равной продолжительности окна, потому что только делая таким образом, результат вычисляется и испускается.
Нет, длительности не зависят, но суммируйте задержку с данным событием.
Продолжительность вашего водяного знака зависит от ваших данных и от того, насколько Лаг вы можете принять за ваше приложение. Допустим, большинство событий в порядке, 10% опаздывают на 1 с, дополнительные 5% - на 10 с, а 1% - на 1 ч.
Если установить длительность водяного знака на 0, тогда 16% Ваши данные сбрасываются, но Flink не получит дополнительной задержки. Если ваш водяной знак отстает от ваших событий на 1 секунду, вы потеряете 6% своих данных, но результаты будут отставать на 1 секунду. Если вы хотите сохранить все данные, Flink нужно будет подождать 1 час для каждой агрегации, пока Flink не сможет быть уверен, что данные отсутствуют.
Но тогда какова роль триггера? и как скольжение windows координируется с водяными знаками и триггерами. Можете ли вы объяснить, как они работают друг с другом?
Допустим, у вас есть окно 1 мин и задержка водяного знака 5 с. Окно сработает только тогда, когда будет уверено, что все соответствующие данные были просмотрены. В этом случае ему нужно подождать 1 мин 5 с, чтобы сработало, так что последнее событие окна обязательно наступило.
Кстати, события позже, поскольку водяной знак по умолчанию отбрасывается. Вы можете изменить это поведение.