Flink中的时间窗口(Time Window)是根据时间区间将数据流切分为多个窗口的机制。时间窗口内的数据会被视为一个整体进行转换或聚合运算。
Flink提供了两种时间窗口:
- 滚动时间窗口(Tumbling Time Window):无重叠,固定窗口长度,滚动产生新窗口。
- 滑动时间窗口(Sliding Time Window):有重叠,固定窗口长度和滑动间隔,滑动产生新窗口。
使用Flink时间窗口的一般步骤:
- 在DataStream上调用timeWindow()方法,传入窗口长度和滑动间隔参数。
- 指定时间窗口的类型:TumblingEventTimeWindows或SlidingEventTimeWindows。
- 在窗口上调用聚合函数(sum、min等)或自定义聚合函数进行计算。
- (可选)调用trigger()方法指定触发器,定义窗口的关闭条件。
- (可选)调用evictor()方法指定移除器,定义移除数据的条件。
下面通过例子来说明时间窗口的使用:
滚动时间窗口:
DataStream<Tuple2<String, Integer>> stream = ...
DataStream<Tuple2<String, Integer>> windowedStream =
stream.window(TumblingEventTimeWindows.of(Time.seconds(5)));
windowedStream.sum(1); // 求和
滑动时间窗口:
DataStream<Tuple2<String, Integer>> stream = ...
DataStream<Tuple2<String, Integer>> windowedStream =
stream.window(SlidingEventTimeWindows.of(Time.seconds(10), Time.seconds(5)));
windowedStream.sum(1);