学习 Flink(三):窗口

滚动窗口

滚动窗口(Tumbling Window)又称固定窗口(Fixed Window),将事件分配到固定大小且非重叠的桶中。当超过了窗口边界,事件就会发送到执行函数进行处理。

计数滚动窗口

基于计数的滚动窗口,定义了在出发执行之前需要收集多少事件:

Count-based Tumbling Window

ds.keyBy(0)  
  .countWindow(5) // ①
  .sum(1)
  .print()

① 计数为 5 的窗口

时间滚动窗口

基于时间的滚动窗口,定义了事件缓存在桶中的时间周期。

Time-based Tumbling Window

ds.keyBy(0)  
  .timeWindow(Time.seconds(10)) // ①
  .sum(1)
  .print()

① 时间为 10 秒的窗口

滑动窗口

滑动窗口(Sliding Window)将事件分配到固定大小且重叠的桶中。因此,事件有可能属于多个桶。滑动窗口由长度和滑动(Slide)定义。

Count-based Sliding Window

ds.keyBy(0)  
  .countWindow(5, 1) // ①
  .sum(1)
  .print()

① 计数为 5 滑动为 1 的窗口

会话窗口

会话窗口(Session Window)中的会话为间隔时间小于会话间隔(Session Gap)的事件。

Session Window

ds.keyBy(0)  
  .window(ProcessingTimeSessionWindows.withGap(Time.seconds(5))) // ①
  .sum(1)
  .print()

① 间隔小于 5 秒为一个 Session 的窗口

自定义窗口

TODO

参考: