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)
イベント時間とウィンドウについては、ドキュメント (こことここ) といくつかのブログ投稿 (ここ、ここ、ここ、およびここ) で詳しく説明されています。