李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
18.Flink window API介绍
Leefs
2022-01-20 PM
976℃
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
标签云
算法
正则表达式
Netty
SQL练习题
国产数据库改造
MySQL
Elasticsearch
Yarn
Java阻塞队列
Spring
设计模式
ClickHouse
ajax
gorm
字符串
Typora
Azkaban
JavaScript
数据结构和算法
Stream流
Python
BurpSuite
JavaWeb
Flume
Linux
MyBatis
容器深入研究
锁
SpringCloud
MyBatisX
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞