Flink中的窗口是什么,有哪些类型?

Flink 中的窗口用于切割无界的数据流成有界的块,以便进行计算。窗口主要有以下几种类型:

  1. 滑动窗口(Sliding Windows):固定大小的窗口,按照固定的滑动间隔滑动。
  2. 滑动跨度窗口(Sliding Window Over Time):按时间间隔生成窗口。
  3. 会话窗口(Session Windows):按会话活跃时间生成窗口,窗口间有一定的不活跃期。
  4. 全局窗口(Global Windows):将整个数据流视为一个窗口。

这些窗口的主要区别在于:

  1. 窗口大小:滑动窗口和滑动跨度窗口大小可配置,会话窗口大小不定。
  2. 生成规则:滑动窗口按记录数生成,滑动跨度窗口按时间生成,会话窗口按不活跃时间生成。
  3. 是否重叠:滑动窗口可重叠,会话窗口和全局窗口不可重叠。
  4. 使用场景:滑动窗口用于近期聚合,会话窗口用于用户行为分析,全局窗口用于总体统计。

我们可以通过 WindowedStream 的 window() 方法定义数据流上的窗口。
例如:

  1. 滑动窗口:
DataStream<T> windowedStream = inputStream.window(SlidingEventTimeWindows.of(Time.seconds(10), Time.seconds(5)));  
  1. 滑动跨度窗口:
DataStream<T> windowedStream = inputStream.window(SlidingEventTimeWindows.of(Time.seconds(10))); 
  1. 会话窗口:
DataStream<T> windowedStream = inputStream.window(EventTimeSessionWindows.withGap(Time.minutes(10)));  
  1. 全局窗口:
DataStream<T> windowedStream = inputStream.window(GlobalWindows.create());  

Flink 中的窗口机制可以将无界流式数据切分成有界块进行计算。