Flink 窗口算子知识点扫盲

文章目录

  • (一)窗口算子(Window)的由来
  • (二)Window的分类
    • (1)按照time和count分类
    • (2)按照slide和size分类
    • (3)time、count与 slide和size组合
  • (三)Window的API
    • (1)EX:API调用示例
    • (2)EX2: countWindow
    • (3)EX3: timeWindow
    • (4)EX4: WindowAssigner
  • (四)Window总结

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

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

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

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

Flink 窗口算子知识点扫盲_第1张图片

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


(二)Window的分类

(1)按照time和count分类

time-window:时间窗口:

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

count-window:数量窗口:

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

Flink 窗口算子知识点扫盲_第2张图片

(2)按照slide和size分类

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

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

Flink 窗口算子知识点扫盲_第3张图片

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

Flink 窗口算子知识点扫盲_第4张图片

那么问题来了

如果我设置间隔十五秒计算一次最近五秒钟的数据 (size

答:可以是可以,因为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调用示例

Flink 窗口算子知识点扫盲_第5张图片

(2)EX2: countWindow

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

image-20210523160551458

(3)EX3: timeWindow

Flink 窗口算子知识点扫盲_第6张图片

(4)EX4: WindowAssigner

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

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

Flink 窗口算子知识点扫盲_第7张图片

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

image-20210523161844186

(四)Window总结

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

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

下一篇

Flink程序中窗口的具体使用

你可能感兴趣的:(flink,flink,大数据,java)