目录
开窗方式
windowAll()
window()
窗口类型
基于时间
基于数量
开窗后的处理函数
全量聚合函数(也叫窗口函数)
增量聚合函数
增量聚合函数携带一个全量聚合函数
开窗方式
windowAll()
对于没有keyBy的数据流
window()
对于KeyBy后的数据流
窗口类型
基于时间
滑动
滚动
会话
滑动
滚动
会话
基于数量
滑动
滚动
开窗后的处理函数
开完窗口后数据的处理方式,首先要对数据进行聚合,聚合的方式分两种,一种全量聚合,一种增量聚合
全量聚合函数(也叫窗口函数)
- process 记住这一个就够了
- apply process效果一样,但是没有process全面
每个窗口的所有数据调用一次该函数,在这个函数中有个迭代器,可以获取当前窗口的所有数据
优点:可以获取整个窗口的全量数据,对数据的可处理性更强,比如排序。而且最重要的是他能获取当前的窗口信息
缺点:资源占用率高,效率低
增量聚合函数
- aggrgate 输入可以与输出类型不一致,api复杂
- reduce 输入和输出类型必须一致,api简单
- max\maxBy
- min\minBy
- sum
每条记录调用一次该函数,这个函数中总有上一条和当前条两个数据
优点:资源占用率低,效率高
缺点:无法进行复杂逻辑的处理,无法获取窗口信息
增量聚合函数携带一个全量聚合函数
增量聚合的缺点过于明显,但是平时的业务对于全量聚合函数的需求又没这么高,因此Flink提供了一个增量聚合函数携带全量聚合函数的混合使用API,数据处理逻辑还是走增量聚合的逻辑,省资源、效率高,但是一个窗口的数据处理完成后,会调用一次全量聚合函数。又完美了应用了全量聚合函数的特点,可以获取窗口时间。
其中全量窗口函数有两个WindowFunction 和ProcessWindowFunction,两种功能一致,后者更强大,官方推荐ProcessWindowFunction