Эвристика водяного знака

Насколько точны оценки водяных знаков при обработке потока в пучке Apache или в потоке искры. Мой источник данных - файлы из gcs/s3, но я использую время события, связанное с каждым событием, как метку времени для функции управления окнами. Любые идеи о том, как эта эвристика или оценка рассчитывается этими механизмами обработки потоков и есть ли способ измерить, насколько плохой была эта оценка.

Мой вариант использования У меня есть несколько серверов, создающих журналы событий на gcs/S3, а затем я читаю эти файлы потоковым способом из моего механизма обработки потоков. Таким образом, это может быть отложено из-за перебоев в работе файловой системы или из-за невозможности очистки событий журнала в течение пары часов. Так что в моем потоке конвейерной обработки правильность является одним из важных аспектов при агрегировании некоторых событий. Так что мне интересно, как вычисляется эта оценка водяного знака

1 ответ

Вообще говоря, водяной знак определяется источником. Когда источник объявляет водяной знак T, он говорит: "Я не ожидаю больше записей со временем события раньше, чем T". Затем механизм потоковой передачи может продолжить закрытие соответствующих окон и т. Д. Могут существовать некоторые события, которые приходят с отметкой времени меньше T, и они будут считаться "поздними". В Apache Beam вы также можете контролировать такие поздние события. Источники в Apache Beam предоставляют водяные знаки, реализуя интерфейс getWatermark() (документация там тоже весьма полезна).

В вашем случае критической частью было бы знать, насколько задержаны эти файлы. Вы упомянули пару часов. Простая эвристика может быть водяным знаком 'latest event time - 2 hours', Исходя из ожидаемого распределения задержек, вы можете ограничить это 10 минутами, чтобы получить большую часть выгоды и рассматривать дальнейшие отсроченные события как "поздние".