flink session window窗口的条件是元素间隔大于gap 还是 大于等于gap?session window是怎么进行合并的?还是通过官方示例:org.apache.flink.streaming.examples.windowing.SessionWindowing 进行分析:

flink session window窗口合并

主要是修改了下数据源,首先添加8这条数据执行结果如下:

flink session window窗口合并

从结果可以看出 b 都在同一个窗口计算。再将8改成9 执行结果如下:

flink session window窗口合并

从结果可以看出(b,9,1) 跟其它key为b的属于不同窗口计算。9-5>3,大于grap会生成不同窗口。具体逻辑可以从源码看出,flink session window 窗口操作的逻辑主要在WindowOperator类中:

   flink session window窗口合并

session window 在这个if条件判断内(有兴趣可以挂个断掉调试下),这里的大概逻辑是一条数据进来分配一个window,获取key,判断是否为session window,是session window进入if 判断内进行处理,否则进入else里处理。这次我们主要分析下窗口是怎么触发合并的,我们主要看下 mergingWindows.addWindow方法:

flink session window窗口合并

这段新数据分配的窗口和获取该数据key历史的窗口,传递到mergeWindows方法中进行合并。mergeWindows方法如下:

flink session window窗口合并

主要的窗口合并判断的逻辑在else if这块

flink session window窗口合并

flink session window窗口合并

通过这两个方法可以很清楚的了解窗口触发合并的机制。

相关文章:

  • 2022-12-23
  • 2021-11-07
  • 2021-09-22
  • 2022-12-23
  • 2022-12-23
  • 2021-10-23
  • 2021-10-24
  • 2021-06-15
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-16
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案