Порядок окна Apache Flink
Используя Apache Flink, я хочу создать потоковое окно, отсортированное по временной метке, которая хранится в событии Kafka. Согласно следующей статье это не реализовано.
https://cwiki.apache.org/confluence/display/FLINK/Time+and+Order+in+Streams
Однако статья датирована июлем 2015 года, а сейчас - почти год спустя. Реализована ли эта функциональность и может ли кто-нибудь указать мне на любую соответствующую документацию и / или пример.
2 ответа
Apache Flink поддерживает потоковые окна на основе временных отметок событий. В Flink эта концепция называется событием-временем.
Чтобы поддержать время события, вы должны извлечь временную метку (длинное значение) из каждого события. Кроме того, вам необходимо поддерживать так называемые водяные знаки, которые необходимы для обработки событий с неправильными временными метками.
Для данного потока с извлеченными временными метками вы можете определить оконную сумму следующим образом:
val stream: DataStream[(String, Int)] = ...
val windowCnt = stream
.keyBy(0) // partition stream on first field (String)
.timeWindow(Time.minutes(1)) // window in extracted timestamp by 1 minute
.sum(1) // sum the second field (Int)
Время события и окна подробно описаны в документации ( здесь и здесь) и в нескольких сообщениях в блоге ( здесь, здесь, здесь и здесь).
Сортировка по временным меткам все еще не поддерживается "из коробки", но вы можете создавать окна на основе временных меток в элементах. Мы называем это оконным событием времени. Пожалуйста, посмотрите здесь: https://ci.apache.org/projects/flink/flink-docs-master/apis/streaming/windows.html.