Blog
flink-19 窗口
窗口:将无限数据切割成有限的”数据块“进行处理
使用水桶接水的比喻,水桶就是窗口
在flink中,窗口其实并不是一个”框“,应该把窗口理解成一个”桶“,在flink中,窗口可以把流切割成有限大小的多个”存储桶“(bucket),每个数据都会分发到对应的桶中,当到达窗口结束时间时,就对每个桶中手机的数据进行计算处理。
flink中窗口并不是静态准备好的,而是动态创建。当有落在这个窗口区间范围的数据到达时,才创建对应的窗口。
另外我们认为到达窗口结束时间时,窗口就触发计算并关闭,实际上”触发计算“和”窗口关闭“两个行为也可以分开。
窗口的分类
按驱动类型分:
- 时间窗口(Time Window)
- 每小时装一桶水,到点就换
- 计数窗口(Count Window)
- 装满一桶水就换
按窗口分配数据的规则分:
- 滚动窗口(Tumbling Window)
- 均匀切片
- 窗口之间没有重叠也不会间隔
- 首尾相接
- 每个数据都会被分配到一个窗口,而且只会属于一个窗口
- 滑动窗口(Sliding Window)
- 大小也是固定的,但是窗口之间不是首尾相接,而是可以错开一定位置
- 滑动窗口会出现重叠
- 数据有可能会分配到多个窗口中,具体的个数由窗口的大小和滑动步长来决定
- 会话窗口(Session Window)
- 会话的超时时间也就是两个会话窗口的最小间距
- 比如用桶接水 10分钟内水不断就放一个桶,超过10分钟没水就换另一个桶
- 数据不会重叠
- 全局窗口(Global Window)
- 没有结束的时候
- 默认时不会触发计算的