Порядок окна 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.

Другие вопросы по тегам