滑动窗口核心概念

滑动窗口是固定窗口更广义的一种形式,通过引入滑动间隔实现窗口的动态移动。它由两个关键参数组成:

  • 窗口大小(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)));