Что такое водяной знак в Flink по отношению к обработке времени события? Зачем это нужно? - PullRequest
0 голосов
/ 18 февраля 2020

Что такое водяной знак в Flink по отношению к обработке времени события? Зачем это нужно? Зачем это нужно во всех случаях использования времени события? Во всех случаях я имею в виду, что если я не выполняю операции с окном, тогда зачем нам нужен водяной знак? Я родом из искрового фона. В искре нам нужны водяные знаки только тогда, когда мы используем windows для входящих событий.

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

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

Приведенный ниже пример:
Предположим, у вас есть BoundedOutOfOrdernessTimestampExtractor с 2 минутное ограничение и 10-минутное падающее окно, которое начинается в 12:00 и заканчивается в 12: 10:
12:01, A
12:04, B
WM, 12:02 // 12:04 - 2 минуты
12:02, C
12:08, D
12:14, E
WM, 12: 12
12:16, F
WM, 12:14 // 12:16 - 2 минуты
12:09, G

В приведенном выше примере [12:02, C] запись не удаляется, а включается в окно 12:00 -12 : 10 и более поздние оценки. Следовательно, водяным знаком также может быть отметка времени события

Запись [12:09, G] включается в окно 12:00 - 12:10 только при наличии принятой даты из 5 минут настроен. Это заботится о поздних и неупорядоченных событиях

Так что теперь, добавляя к моему предыдущему вопросу выше, что необходимо для опции outoforder, чтобы BoundedOutOfOrdernessTimestampExtractor некоторого значения (кроме 0) вместо метки времени события istelf?
Чего может достичь тот внешний орган, чего не может разрешенная длина и по какому сценарию это делает?

1 Ответ

2 голосов
/ 18 февраля 2020

Водяные знаки и windows тесно связаны, но это очень разные понятия.

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

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


изменить, чтобы ответить на вопросы в комментариях.

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

Нет, длительности не зависят, но суммируйте задержку с данным событием.

Продолжительность вашего водяного знака зависит от ваших данных и от того, насколько Лаг вы можете принять за ваше приложение. Допустим, большинство событий в порядке, 10% опаздывают на 1 с, дополнительные 5% - на 10 с, а 1% - на 1 ч.

Если установить длительность водяного знака на 0, тогда 16% Ваши данные сбрасываются, но Flink не получит дополнительной задержки. Если ваш водяной знак отстает от ваших событий на 1 секунду, вы потеряете 6% своих данных, но результаты будут отставать на 1 секунду. Если вы хотите сохранить все данные, Flink нужно будет подождать 1 час для каждой агрегации, пока Flink не сможет быть уверен, что данные отсутствуют.

Но тогда какова роль триггера? и как скольжение windows координируется с водяными знаками и триггерами. Можете ли вы объяснить, как они работают друг с другом?

Допустим, у вас есть окно 1 мин и задержка водяного знака 5 с. Окно сработает только тогда, когда будет уверено, что все соответствующие данные были просмотрены. В этом случае ему нужно подождать 1 мин 5 с, чтобы сработало, так что последнее событие окна обязательно наступило.

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

...