flink窗口分类
窗口分类
按照驱动类型分类
窗口本身是截取有界数据的一种方式,所以窗口一个非常重要的信息就是“怎样截取数据”。换句话说,就是以什么标准来开发和结束数据的截取。
按照驱动类型分类主要分为两类:时间窗口与计数窗口
1、时间窗口
时间窗口以时间点来定义窗口的开始与结束,所以截取出的就是某一段时间的数据,窗口的时间范围都是左闭右开的原则[start,end);
2、计数窗口
计数窗口基于元素的个数来截取数据,到达固定的个数时就触发计算并关闭窗口。
计数窗口相比时间窗口更加简单,我们只需要指定窗口大小,就可以把数据分配到对应的窗口当中,在flink内部也并没有对应的类来标识计数窗口,底层是通过“全局窗口”来实现的。
按照窗口分配数据的规则分类
时间窗口与计数窗口,只是对窗口的一个大致划分,在具体应用时,还需要定义更加精细的规则,来控制数据应该划分到哪个窗口中去,不同的分配数据的方式,就可以有不同的功能应用。
根据分配数据的规则,窗口的具体实现可以分为4类,滚动窗口(Tumbling Window)、滑动窗口(Sliding Window)、会话窗口(Session Window)、全局窗口(Global Window)
滚动窗口
滚动窗口有固定的大小,是一种对数据进行“均匀切片”的划分方式。窗口之间没有重叠,也不会有间隔,是首尾相接的状态。
滚动窗口可以基于时间定义,也可以基于数据个数定义,需要的参数只有一个,就是窗口大小。
滚动窗口的应用非常广泛,它可以对每个时间段做聚合统计,很多bi分析指标都可以用它来实现。滑动窗口
与滚动窗口类似,滑动窗口的大小也是股东的。区别在于,窗口之间并不是首尾相接的,而是可以错开一定的位置。
滑动窗口是固定大小窗口更广泛的一种形式,滚动窗口也可以看做是一种特殊的挂冬窗口-窗口大小等于步长(size = slide)
在一些场景中,可能需要统计最近一段时间内的指标,而结果的输出频率要求又很高,甚至要求实时更新,比如股票价格24小时的涨跌幅统计,或者基于一段时间内行为检测异常报警,这是滑动窗口无疑就是很好的实现方式。会话窗口
会话窗口,顾名思义,就是基于会话来对数据进行分组的。这里的会话类似web应用中的session的概念,不过并不标识两端的通讯过程,而是借用会话超时失效的机制来描述窗口。数据来了就开启一个会话窗口,如果超过指定时间没有收到数据,那么就认为会话失效,窗口自动关闭。
与滑动窗口和滚动窗口不一样,会话窗口只能基于时间来定义。
考虑到时间语义下的乱序流,相邻两个数据的时间间隔gap大于指定size的大小,被判定为两个窗口,上一个窗口就可以关闭,可在乱序数据的情况下,可能会有迟到数据,他的时间戳恰好在之前的两个数据之间的,这样一来,之前我们判断的间隔中就不是“一直没数据”,而合并之后的间隔有可能比size还小-标识这三个数据应该是同一个会话窗口。
flink底层,对会话窗口的处理比较特殊:每来一个新数据,都会创建一个新的会话窗口,然后判断已有窗口之间的距离,如果小于给定的size,就对他们进行合并。在window算子中,对会话窗口会有单独的处理逻辑。
对比之前的两种窗口,会话窗口的长度不固定,起始与结束时间也是不确定的,各个分区之间窗口没有任何关联。会话窗口一定是不会重叠的,而且会留下至少为size的间隔。全局窗口
全局窗口是一类比较通用的窗口,这种窗口全局有效,会把相同key的所有数据都分配到同一个窗口中,就跟没有分窗口一样。无界流的数据永无止尽,所以这种窗口也没有结束的时候,默认是不会触发计算的,如果希望对数据进行计算处理,还需要自定义触发器。
窗口分配器
- 时间窗口
1、滚动处理时间窗口
窗口分配器由TumblingProcessingTimeWindows提供,传入一个time类型的参数,标识滚动窗口的大小。
stream.keyBy(...).window(TumblingProcessingTimeWindows.of(Time.seconds(5)))
.aggregate(...)
2、滑动处理时间窗口
窗口分配器由类SlidingProcessingTimeWindows提供,需要两个time类型的参数,size和slide,前者表示滑动窗口的大小,后者表示滑动窗口的步长。滚动窗口就是滑动窗口的特殊情形-size = slide
stream.keyBy(...).window(SlidingProcessingTimeWindows.of(Time.seconds(10),Time.seconds(5)))
.aggregate(...)
3、处理时间会话窗口
窗口分配器由类ProcessingTimeSessionWindows提供,需要调用它的.withGap()方法或者.withDynamicGap(),
.withGap()方法需要传入一个time类型的参数size,表示会话的超时时间,也就是最小间隔session gap
.withDynamicGap()需要传入一个SessionWindowTimeGapExtractor作为参数,用来定义session gap的动态提取逻辑。
stream.keyBy(...).window(ProcessingTimeSessionWindows.withGap())
.aggregate(...)
4、滚动事件时间窗口
窗口分配器由类TumblingEventTimeWindows提供,用法与滚动处理事件窗口完全一致。
stream.keyBy(...).window(TumblingEventTimeWindows.of(Time.seconds(5)))
.aggregate(...)
5、滑动事件时间窗口
窗口分配器由类SlidingEventTimeWindows提供,用法与滑动处理事件窗口完全一致。
stream.keyBy(...).window(SlidingEventTimeWindows.of(Time.seconds(10),Time.seconds(5)))
.aggregate(...)
6、事件时间会话窗口
窗口分配器由EventTimeSessionWindows提供,用法与处理事件会话窗口完全一致。
stream.keyBy(...).window(EventTimeSessionWindows.withGap(Time.seconds(10)))
.aggregate(...)
窗口的生命周期
- 窗口的创建
窗口的类型和基本信息由窗口分配器(window assigners)指定,但窗口不会预先创建好,而是由数据驱动创建,当第一个应该属于该窗口的元素到达时,就会创建对应的窗口。 - 窗口计算的触发
每个窗口都会有自己的窗口函数和触发器,窗口函数可以分为增量聚合函数和全窗口函数,主要定义了窗口中计算的逻辑,而触发器则是指定调用窗口函数的条件。 - 窗口的销毁
一般情况下,当时间达到了结束点,就会触发计算输出结果、进而清楚状态销毁窗口,这时的窗口的销毁可以认为和触发计算是同一时刻。这里需要注意,flink中只对时间窗口(TimeWindow)有销毁机制,由于计数窗口(CountWindow)是基于全局窗口(GlobalWindow)实现的,全局窗口不会清除状态,所以就不会被销毁。
在特殊场景下,窗口的销毁和触发计算会有所不同,事件时间语义下,如果设置了允许延迟,那么在水位线到达窗口结束时间时,仍然不会销毁窗口:窗口真正被完全删除的时间点,是窗口的结束时间加上用户指定的允许延迟时间。
flink窗口分类的更多相关文章
- 斯坦福深度学习与nlp第四讲词窗口分类和神经网络
http://www.52nlp.cn/%E6%96%AF%E5%9D%A6%E7%A6%8F%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E4%B8%8Enlp%E7%A ...
- 第08讲:Flink 窗口、时间和水印
Flink系列文章 第01讲:Flink 的应用场景和架构模型 第02讲:Flink 入门程序 WordCount 和 SQL 实现 第03讲:Flink 的编程模型与其他框架比较 第04讲:Flin ...
- Flink窗口介绍及应用
Windows是Flink流计算的核心,本文将概括的介绍几种窗口的概念,重点只放在窗口的应用上. 本实验的数据采用自拟电影评分数据(userId, movieId, rating, timestamp ...
- Flink(八)【Flink的窗口机制】
目录 Flink的窗口机制 1.窗口概述 2.窗口分类 基于时间的窗口 滚动窗口(Tumbling Windows) 滑动窗口(Sliding Windows) 会话窗口(Session Window ...
- Flink架构、原理与部署测试
Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,它能够基于同一个Flink运行时,提供支持流处理和批处理两种类型应用的功能. 现有的开源计算方案,会把流处理和批处理作为 ...
- Flink架构、原理与部署测试(转)
Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,它能够基于同一个Flink运行时,提供支持流处理和批处理两种类型应用的功能. 现有的开源计算方案,会把流处理和批处理作为 ...
- Flink学习(一)
Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,它能够基于同一个Flink运行时,提供支持流处理和批处理两种类型应用的功能. 现有的开源计算方案,会把流处理和批处理作为 ...
- Flink初探-为什么选择Flink
本文主要记录一些关于Flink与storm,spark的区别, 优势, 劣势, 以及为什么这么多公司都转向Flink. What Is Flink 一个通俗易懂的概念: Apache Flink 是近 ...
- 阿里重磅开源全球首个批流一体机器学习平台Alink,Blink功能已全部贡献至Flink
11月28日,Flink Forward Asia 2019 在北京国家会议中心召开,阿里在会上发布Flink 1.10版本功能前瞻,同时宣布基于Flink的机器学习算法平台Alink正式开源,这也是 ...
随机推荐
- Python入门-运算符
运算通常可以根据最终获得的值不同,可以分两类,即结果为具体的值,结果为bool值,那么哪些结果为具体的值-->算数运算.赋值运算,哪些结果又为bool值?--->比较运算.逻辑运算和成员运 ...
- windows安装rabbitmq踩坑实录
最近学习springcloud消息总线需要用到rabbitmq,然后安装的时候踩了一些坑,记录如下: 首先安装rabbitmq之前需要先安装erlang,因为rabbitmq服务端使用erlang写的 ...
- Problem N: 输出回字形
这个题如果用for循环直接做的话恐怕得做上几个小时吧,加上一点小技巧,用坐标法来写这个题.就像下面这样: 坐标原点不在矩形的角上,而在矩形的中心处,这只是算是一个技巧,理解起来好理解而已.
- BurpSuite与Xray多级代理实现联动扫描
Xray是长亭科技推出的,最经典的莫过于代理模式下的被动扫描,它使得整个过程可控且更加精细化: 代理模式下的基本架构为,扫描器作为中间人,首先原样转发流量,并返回服务器响应给浏览器等客户端,通讯两端都 ...
- Centos7 搭建 Socks 服务
Centos7 搭建 Socks 服务 一丶拿到一个动态拨号的服务器还不能使用网络得先打开: pppoe-start 二丶安装命令汇总: 通过yum安装ss5 依赖包: yum install gcc ...
- AcWing 165. 小猫爬山 DFS
165. 小猫爬山 https://www.acwing.com/problem/content/description/167/ 题目 思路 dfs每一个小猫,对于要不要开新车的状态再进行dfs(注 ...
- Educational Codeforces Round 121 (Rated for Div. 2)——B - Minor Reduction
B - Minor Reduction 题源:https://codeforces.com/contest/1626/problem/B 题意 给定一个超级大的整数 x ,可以对任意相邻两位数进行操作 ...
- JVM内存管理面试常见问题全解
目录 一.什么是JVM 1.jvm的三个组成部分 二.类加载系统 1.类的加载过程 2.类加载器 三.双亲委派机制 1.双亲委派机制介绍 2.为什么要双亲委派机制 3.双亲委派机制的核心源码 4.全盘 ...
- Apache Doris 单节点(可多节点)Docker集群制作教程
集群制作Author:苏奕嘉脚本研发Author:种益调研测试Author:杨春东 前言 Apache Doris是当下非常火热和流行的MPP架构OLAP数据库,很多同学想自学/测试Doris的使用和 ...
- Linux中,MySQL的常用命令
我的博客 登录 mysql -u用户名 -p -- 然后在下面输入密码,Linux的密码不会显示出,盲打就可以 mysql -u用户名 -p密码 -- 这种方式将直接登录 开关 开启数据库 servi ...