Flink 窗口算子知识点扫盲

(一)窗口算子(Window)的由来

Flink是一个流式计算框架,在流处理应用中,数据是连续不断的;但有时候的业务需求,需要我们在在流的基础上做一定的聚合处理,比如两个元素计算一次结果,或者五秒钟计算一次结果…应用到实际中的场景则为过去一分钟用户点击量、过去一小时订单成交额度…等等

故此,Flink引入了窗口这个概念,窗口(Window)是Flink程序中算子之一,是处理无限的核心。窗口将流分成有限大小的“存储块”,我们可以在其上应用计算。

如同生活中所见的窗口一样,我们可以将Flink中的窗口算子理解为一种数据通道,比如我们规定,这个窗子打开后,向里边丢小球,每当窗口另一边有了十个小球,便做什么事情(比如计算所有小球重量,后者比较十个小球中最大或最小的数据…)

image-20210523152410842

如果按照上方说的示例(过去一分钟用户点击量),我们则须定义一个窗口(window),用来收集最近1分钟内的数据,并对这个窗口内的数据进行计算。


(二)Window的分类

(1)按照time和count分类

time-window:时间窗口:

根据时间划分窗口,每过一定时间,触发窗口计算 如:每5分钟计算最近5分钟的数据结果

count-window:数量窗口:

根据数量划分窗口,每达到一定数量,触发窗口计算 如:每3个数据计算一次最近3个数据结果

image-20210523153421282

(2)按照slide和size分类

窗口有两个重要的属性: 窗口大小size和滑动间隔slide,根据它们的大小关系可分为:

tumbling-window:滚动窗口:size=slide,如:每隔10s统计最近10s的数据

image-20210523153621909

sliding-window:滑动窗口:size>slide,如:每隔5s统计最近10s的数据

image-20210920222054965

那么问题来了

如果我设置间隔十五秒计算一次最近五秒钟的数据 (size<slide【 窗口大小小于滑动间隔】),是否可以呢?

答:可以是可以,因为Flink本身不会限制你这种设置;但是15秒计算一次最近5秒数据,那么另外的10秒数据呢便丢掉了!!!!除特殊场景外,此种操作基本无实用性!

注意点:虽然窗口 有滚动与滑动之分,但是必须要设置的符合基本逻辑,像上边这种设置,导致数据丢失,其最后计算结果出差错那是必然的,设置窗口大小与滚动滑动间隔必须要严谨一点…

(3)time、count与 slide和size组合

  • 基于时间的滚动窗口tumbling-time-window

  • 基于时间的滑动窗口sliding-time-window

  • 基于数量的滚动窗口tumbling-count-window

  • 基于数量的滑动窗口sliding-count-window

在我个人公司目前的开发工作中中,基于数量的滚动窗口与基于事件的滚动窗口用的还是比较多的,但是具体的使用场景还是得看具体业务

(三)Window的API

前边已经简单的说了flink计算程序开发步骤 :获取环境、加载数据源、算子处理、数据输出;Window操作也是属于算子处理这一步。

我们只需要在数据源( 可选是否使用KeyBy算子,是否使用KeyBy大有讲究,后边点会细讲)后调用对应window算子方法即可,

(1)EX:API调用示例

image-20210523155924080

(2)EX2: countWindow

如果您要基于数量窗口进行计算,可直接指定为CountWindow算子

image-20210523160551458

(3)EX3: timeWindow

image-20210523161121900

(4)EX4: WindowAssigner

WindowAssigner 是窗口分配器,就是将我们的数据,根据定义的分配器策略分配到不同的类型窗口中

下图是Flink1.12中,WindowAssigner支持的所有窗口

image-20210523161440200

下边这些窗口,每一种都有着不同的应用场景,种类繁多,我这里不会一一演示,但其作用与他的名字是一致的,比如TumblingProcessingTimeWindows 基于处理时间的时间窗口,什么是处理时间?后续在Flink time专题栏会讲到,请敬请期待…

image-20210523161844186

(四)Window总结

WindowFlink程序中算子之一,是处理无限的核心,窗口将流分成有限大小的“存储块”,我们可以在其上做一定的数据聚合,应用计算

我们可以将Window 视作为数据流处理与批处理的桥梁

下一篇

Flink程序中窗口的具体使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值