Flink窗口window详解(分类、生命周期、窗口分配器、窗口函数、触发器)

一、窗口的分类

时间窗口:滚动(窗口大小)、滑动(窗口大小、滑动步长)、会话(会话超时时间)

计数窗口:滚动、滑动

二、窗口window的四个关键组件

窗口操作一般在keyby之后调用window函数进行计算,因为进行keyby之后,原始的datastream就会分成多条逻辑流,就是keyedStream,基于keyedStream的窗口操作会开启多个并行子任务,即对不同的key分别开启一个并行子任务,各自独立进行窗口计算。

如果没有keyBy而直接进行窗口计算,调用的是windowAll函数,windowAll函数本身是一个非并行的操作,那么即使手动调大了窗口算子并行度也是无济于事的,最终只会在一个task上进行计算,并行度为1。在实际应用中不推荐。

(1)(必要)窗口分配器(window assigner)

定义数据应该被分配到哪个窗口,数据流经过窗口分配器处理后得到的是windowedStream,这个类型并不是datastream, 所以不能直接进行其他转换,必须进一步调用窗口函数,才能再次得到datastream。

时间窗口根据分类可以通过在window方法中传入不同参数定义如下六种窗口分配器:TumblingProcessingTimeWindows、SlidingProcessingTimeWindows、ProcessingTimeSessionWindows、TumblingEventTimeWindows、SlidingEventTimeWindows、EventTimeSessionWindows。

计数窗口直接调用.countWindow()方法,传入一个参数则是滚动,两个则是滑动计数窗口。

(2)(必要)窗口函数(window functions)

定义窗口数据的具体计算逻辑。原**始的datastream经过窗口分配器处理之后的数据类型时windowedStream,它不属于dataStream,需要进一步调用窗口函数才能变成dataStream。**窗口函数基于处理方式的不同,可以分为如下两种:

增量聚合函数(流处理思想) :来一条数据处理一条,但不立即输出计算结果,等窗口到了结束时间需要计算结果的时候,直接将之前的聚合状态输出,提高了程序运行效率和实时性

典型的增量聚合函数有两种:归约函数.reduce((new ReduceFunction))和聚合函数.aggrerate(new AggregateFuntion)。归约函数要求聚合结果类型与原始数据类型一致,适用面更窄。聚合函数可以自定义中间状态累加器,更符合Flink的有状态的流处理思想。

全窗口函数(批处理思想): 先收集窗口中的数据并缓存起来,等到窗口要输出计算结果时再取出全部数据进行计算。全窗口函数再有些场合十分有用 :如要计算分位数,则必须等所有数据到齐才能进行计算。此外,全窗口函数还能输出丰富的上下文信息(如窗口的起始时间)。

在Flink中,全窗口函数可以通过.process(new **ProcessWindowFunction)**来实现。

(3)(可选)触发器(Trigger)

触发器可以控制窗口函数的执行。试想这样一种情况:你要计算一台能的pv,你的窗口大小是一天(0点到24点),但你想要在中间的每一个整点时刻也能看到从当天0点累计到当前整点的pv(0-1,0-2,0-3...),那么就可以使用触发器,在每个整点也触发一次计算并输出计算结果。

对windowedStream类型的数据流调用.trigger()方法,就可以传入一个自定义触发器了。这里就不详述trigger的具体实现了,感兴趣的可以自己查看。

(4)(可选)退出器(Evictor)

在执行窗口函数之前或之后的移除数据的逻辑操作。对windowedStream调用.evictor()方法。

三、窗口的生命周期

(1)窗口的创建

窗口的类型和基本信息由窗口分配器(window assigners)指定,但窗口不会预先创建好,而是数据驱动创建的。当属于这个窗口的第一个元素到来时,就会创建对应的窗口。

(2)窗口计算的触发

窗口函数和触发器都能触发窗口的计算。窗口函数定义了窗口计算的逻辑,触发器则指定了调用窗口函数的条件。

(3)窗口的销毁

默认情况下,当水位线到达了窗口的结束时间,就会触发计算并销毁窗口。当设置了允许迟到数据后,水位线到达窗口的结束时间会触发计算,但窗口不会立即销毁,而是在(窗口结束时间+设置的允许等待的时间)的水位线到来才会销毁窗口。

相关推荐
workflower2 分钟前
具身智能行业应用-生活服务业
大数据·人工智能·机器人·动态规划·生活
志栋智能1 小时前
超自动化安全:构建智能安全运营的核心引擎
大数据·运维·服务器·数据库·安全·自动化·产品运营
xiaoduo AI1 小时前
客服机器人非工作时间能休眠?智能Agent开放平台定时唤醒,无人值守省资源?
大数据·人工智能·机器人
好赞科技2 小时前
深度测评2026年精选美发预约小程序排行榜 革新预约新体验 修订
大数据·微信小程序
集和诚JHCTECH4 小时前
BRAV-7120加持,让有毒有害气体无处遁形
大数据·人工智能·嵌入式硬件
互联网志5 小时前
加速高校科技成果转化 赋能实体经济高质量发展
大数据·人工智能·物联网
李可以量化5 小时前
DeepSeek 量化交易实战:用标准化提示词模板实现 AI 辅助交易决策
大数据·数据库·人工智能
学掌门6 小时前
数据分析师职业规划——数据分析师的职业焦虑与未来发展
大数据·信息可视化
亚马逊云开发者6 小时前
EMR Core 节点部署 Flink Client 实战:Bootstrap Action 一次打包多次复用,解决调度系统提交任务的痛点
大数据·flink·bootstrap
盘古信息IMS6 小时前
九宸纳百川,数智启新程|盘古信息与合肥昊邦科技合资成立合肥九宸智能,共筑智造新生态
大数据·人工智能