李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
18.Flink window API介绍
Leefs
2022-01-20 PM
1518℃
0条
[TOC] ### 一、窗口(window) 概念 ![18.Flink window API介绍 01.png](https://lilinchao.com/usr/uploads/2022/01/2396891128.png) + streaming流式计算是一种被设计用于处理无限数据集的数据处理引擎 + 无限数据集是指一种不断增长的本质上无限的数据集 + 窗口(window)是一种**切割无限数据为有限块进行处理**的手段 + Window是无限数据流处理的核心,**Window将一个无限的stream拆分成有限大小的”buckets”桶**,我们可以在这些桶上做计算操作 + Flink认为Batch是Streaming的一个特例,所以Flink底层引擎是一个流式引擎,在上面实现了流处理和批处理。 + 窗口(window)就是从 Streaming 到 Batch 的一个桥梁 **场景示例** 当然我们可以每来一个消息就处理一次,但是有时我们需要做一些聚合类的处理,例如:在过去的1分钟内有多少用户点击了我们的网页。 在这种情况下,我们必须定义一个窗口,用来收集最近一分钟内的数据,并对这个窗口内的数据进行计算。 - 窗口可以是基于时间驱动的(Time Window,例如:每30秒钟) - 也可以是基于数据驱动的(Count Window,例如:每一百个元素) ### 二、窗口生命周期 **2.1 概述** + 窗口的生命周期,就是从创建到销毁的整个过程。 + 窗口的开始时间和结束时间是基于自然时间创建的,比如指定一个5s的窗口,那么1分钟内就会创建12个窗口。 **2.2 什么时候窗口会被创建?** 当第一个元素进入到窗口开始时间的时候,这个窗口就被创建了。 **2.3 什么时候窗口会被销毁?** 当时间(ProcessTime、EventTime或者 IngestionTime)越过了窗口的结束时间,再加上用户自定义的窗口延迟时间(allowed lateness),窗口就会被销毁。 **2.4 举例说明窗口生命周期** > 假设我们定义了一个基于事件时间的窗口,长度是5分钟,并且允许有1分钟的延迟。 **过程分析:**当第一个元素包含了一个12:00的事件时间进来时,Flink会创建一个12:00 到 12:05 的窗口;在水位到 12:06 的时候,会销毁这个窗口。 **2.5 执行过程** 每个窗口都会绑定一个触发器和一个执行函数。 触发器定义了何时会触发窗口的执行函数的计算,比如在窗口元素数量大于等于4的时候,或者水位经过了窗口结束时间的时候。 另外,每个窗口可以指定驱逐器(Evictor),它的作用是在触发器触发后,执行函数执行前,移除一些元素。 ### 三、Keyed 和 Non-keyed Window 在定义窗口之前,首先要指定你的流是否应该被分区,使用 `keyBy(...)` 后,相同的key会被划分到不同的流里面,每个流可以被一个单独的task处理。 如果不使用keyBy ,所有数据会被划分到一个窗口里,只有一个task处理,并行度是1. ### 四、窗口(window)类型 #### 4.1 窗口分类 + **时间窗口(Time Window)**:按照时间生成 Window。 + 滚动时间窗口 + 滑动时间窗口 + 会话窗口 + **计数窗口(Count Window)**:按照指定的数据条数生成一个Window,与时间无关。 + 滚动计数窗口 + 滑动计数窗口 #### 4.2 滚动窗口(Tumbling Windows) 将数据依据固定的窗口长度对数据进行切片。 **特点:时间对齐,窗口长度固定,没有重叠。** 滚动窗口分配器将每个元素分配到一个指定窗口大小的窗口中,滚动窗口有一 个固定的大小,并且不会出现重叠。 **例如:** 如果你指定了一个5分钟大小的滚动窗口,窗口的创建如下图所示: ![18.Flink window API介绍 02.png](https://lilinchao.com/usr/uploads/2022/01/2012607287.png) **适用场景:**适合做BI统计等(做每个时间段的聚合计算)。 #### 4.3 滑动窗口(Sliding Windows) 滑动窗口是固定窗口的更广义的一种形式,滑动窗口由固定的**窗口长度**和**滑动间隔**组成。 **特点:时间对齐,窗口长度固定,可以有重叠。** 滑动窗口分配器将元素分配到固定长度的窗口中,与滚动窗口类似,窗口的大小由窗口大小参数来配置,另一个窗口滑动参数控制滑动窗口开始的频率。 因此, 滑动窗口如果滑动参数小于窗口大小的话,窗口是可以重叠的,在这种情况下元素会被分配到**多个窗口**中。 例如,你有10分钟的窗口和5分钟的滑动,那么每个窗口中5分钟的窗口里包含着上个10分钟产生的数据,如下图所示: ![18.Flink window API介绍 03.png](https://lilinchao.com/usr/uploads/2022/01/1678308393.png) **适用场景:**对最近一个时间段内的统计(求某接口最近 5min 的失败率来决定是否要报警)。 #### 4.4 会话窗口(Session Windows) 由一系列事件组合一个指定时间长度的timeout间隙组成,类似于web应用的session,也就是一段时间没有接收到新数据就会生成新的窗口。 **特点:时间无对齐。** session窗口分配器通过session活动来对元素进行分组,session窗口跟滚动窗口和滑动窗口相比,不会有重叠和固定的开始时间和结束时间的情况,相反,当它在一个固定的时间周期内不再收到元素,即非活动间隔产生,那个这个窗口就会关闭。 一个session窗口通过一个 session 间隔来配置,这个session间隔定义了非活跃周期的长度,当这个非活跃周期产生,那么当前的 session将关闭并且后续的元素将被分配到新的session窗口中去。 ![18.Flink window API介绍 04.png](https://lilinchao.com/usr/uploads/2022/01/232642455.png) *附参考文章链接:* *https://cloud.tencent.com/developer/article/1539212* *https://www.cnblogs.com/data-magnifier/p/14608739.html*
标签:
Flink
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/1861.html
上一篇
17.Flink流处理API之Sink
下一篇
19.Flink Window API使用详解
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
MyBatis-Plus
Map
稀疏数组
Java编程思想
Beego
数学
正则表达式
设计模式
人工智能
Scala
前端
机器学习
Spark SQL
Flume
字符串
并发线程
查找
散列
DataX
Shiro
Jenkins
并发编程
锁
Quartz
gorm
Jquery
Golang
Python
Livy
Spring
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭