滑动窗口核心概念
滑动窗口是固定窗口更广义的一种形式,通过引入滑动间隔实现窗口的动态移动。它由两个关键参数组成:
- 窗口大小(window size):决定每个窗口包含的数据范围
- 滑动步长(slide interval):控制窗口的移动频率
当步长小于窗口大小时,窗口之间会产生重叠。例如,设置10分钟窗口+5分钟步长,系统每5分钟计算过去10分钟的数据。
窗口重叠机制
- 滑动窗口会有重叠部分,每个事件可能被包含在多个窗口中
- 重叠程度由窗口大小和滑动步长决定
- 窗口大小5分钟,滑动步长1分钟,则重叠部分为4分钟
典型应用场景
- 移动平均值(如股票5日均线)
- 最近一段时间的活跃用户统计
- 实时流量监控
- 传感器数据平滑处理
基于时间驱动实现示例
WindowedStream<Tuple2<String, Integer>, Tuple, TimeWindow> timeWindow = keyedStream
.timeWindow(Time.seconds(10), Time.seconds(5));
timeWindow.apply(new MyTimeWindowFunction()).print();
基于事件驱动实现示例
WindowedStream<Tuple2<String, Integer>, Tuple, GlobalWindow> globalWindow = keyedStream
.countWindow(3, 2);
globalWindow.apply(new MyCountWindowFuntion()).print();
会话窗口
会话窗口由一系列事件组合一个指定时间长度timeout间隙组成,类似于Web应用的Session。一段时间没有接收到新数据会生成新的窗口。
WindowedStream<Tuple2<String, Integer>, Tuple, TimeWindow> window = keyedStream
.window(ProcessingTimeSessionWindows.withGap(Time.seconds(10)));