Основное различие между двумя типами водяных знаков заключается в том, как/когда вызывается метод getWatermark
.
периодический водяной знак
С периодическими водяными знаками, Flink вызывает getCurrentWatermark()
на регулярные промежутки времени, независимо от потока событий. Этот интервал определяется с использованием
ExecutionConfig.setAutoWatermarkInterval(millis)
Используйте этот класс, когда ваши водяные знаки зависят (даже частично) от времени обработки, или когда требуется, водяные знаки, издаваемого, даже если нет событий/элементов не было получено некоторое время.
перемежается водяные знаки
С перемежается водяных знаков, Flink называет checkAndGetWatermark()
на каждом новом событии, то есть сразу же после вызова assignWatermark()
. Фактический водяной знак испускается только в том случае, если checkAndGetWatermark
возвращает ненулевое значение, которое больше, чем последний водяной знак.
Это означает, что если вы не получили какой-либо новый элемент какое-то время, водяной знак не может быть выброшен.
Используйте этот класс, если определенные специальные элементы действуют как маркеры, которые означают ход событий, и когда вы хотите выделять водяные знаки специально для определенных событий. Например, в вашем входящем потоке могут быть флаги, обозначающие конец последовательности.