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