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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值