2016-06-14 4 views
1

Mit Apache Flink möchte ich ein Streaming-Fenster erstellen, das nach dem im Kafka-Ereignis gespeicherten Zeitstempel sortiert ist. Laut dem folgenden Artikel ist dies nicht implementiert.Apache Flink Fenster Bestellung

https://cwiki.apache.org/confluence/display/FLINK/Time+and+Order+in+Streams

Allerdings ist der Artikel Juli 2015 datiert, ist es jetzt fast ein Jahr später. Ist diese Funktionalität implementiert und kann mir jemand auf relevante Dokumentation und/oder ein Beispiel verweisen?

Antwort

1

Apache Flink unterstützt Stream-Fenster basierend auf Ereigniszeitstempeln. In Flink wird dieses Konzept Ereignis-Zeit genannt.

Um die Ereigniszeit zu unterstützen, müssen Sie einen Zeitstempel (Long-Wert) von jedem Ereignis extrahieren. Darüber hinaus müssen Sie sogenannte Wasserzeichen unterstützen, die benötigt werden, um Ereignisse mit Out-of-Order-Zeitstempeln zu behandeln.

ein Strom mit extrahierter Zeitstempel Gegeben Sie eine Fenster Summe wie folgt definieren:

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) 

Ereigniszeit und Fenster sind ausführlich in der Dokumentation (here und here) und in mehreren Blog-Beiträge (here erklärt , here, here und here).