Flink的窗口类型详解

简介: Flink的窗口类型详解

这是我的第87篇原创

窗口函数真奇妙,聚合计算快又好,

数据分析宝中宝,表哥表妹不能少,不!能!少!


在我刚入行的时候,还不懂啥窗口函数,想出一张报表那叫一个费劲啊,各种自关联、行转列、列转行玩的不亦乐乎。

后来知道有个叫“窗口函数/聚合函数”的东西,简直把我惊呆了,感觉好几年的功夫都白练了。

之前给大家分享过Hive的窗口函数全解,点击查看:【面试必问】窗口函数全解-HIVE


无限数据流的统计问题

今天给大家分享一下Flink的Windows。Hive的窗口函数其实跟MySQL的差不多,因为他们都是基于离线数据的聚合。Flink的windows和Hive的窗口函数不完全一样。


离线数据处理好理解,数据已经落地在一张表里,咱可以通过partition by,按照某个字段进行分区,通过order进行排序,通过between进行范围限定,然后通过LEAD、FIRST_VALUE等进行定位,最后通过sum、avg等聚合函数进行计算。这就像计算图片中有多少个植物一样清晰明了。实在不行,咱硬数也是能行的。


但是Flink里的数据是个流,数据压根就不会落地,这咋进行计算啊?这是一个“无限游戏”啊!好比你得算一下植物大战僵尸里被射出多少颗豌豆子弹一样。非要计算,就只能永远计算一个不断增大的累计数而已。

除非咱能像截图一样,让数据停下来,然后咱再一颗一颗去数,否则根本没法算清楚范围内有多少颗豌豆子弹。这根本没法分析啊!


Flink的窗口类型

Flink是怎么解决这个问题的呢?很简单,设置一个固定的观察窗口,不停的计算窗口内的豌豆子弹数就可以了。这样就把无限数据流,变成有限数据块了。这样问题就解决了。

但是,有个问题,怎么划分窗口的范围呢?也就是说,如何切割窗口呢?几个办法:

1、用时间切割窗口,每过N秒记为一个window,即TimeWindow;

2、用数据量切割窗口,每N个数据记为一个window,即CountWindow;

3、用session切割窗口,数据流中断N秒记为一个window,即Sessionwindow;

4、不限定,从一开始到现在不断累计计算,即global window。这种状态下,Flink并行度只能为1。


另外,对于TimeWindow和CountWindow,分别还有两种细分类型:滚动窗口和滑动窗口

滚动窗口就是一个固定区间(时间或者数量),不断滚动,区间严格分离,不会重复。

滑动窗口顾名思义,就是窗口区间是可以拖动的,所以会重复。


对了,针对数据本身,Flink还设置了keyed和non keyed两种windows,这是为了后续处理用的。其实就是解决你是否要区分子弹类型的:

如果用了keyed windows,Flink会把相同key的数据发送到同一个task里进行处理,这样并行度就高了。

如果用了Non Keyed Windows,那么所有数据都会放在一个task里操作,并行度也就只能为1了。


总结一下,Flink的窗口按切割方式、是否有key值、滑动还是滚动三个维度,分为以下几种情况:

基本上这些窗口就能满足所有业务需求了。


下次再分享Flink窗口的其他内容~~~

相关实践学习
基于Hologres+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
相关文章
|
消息中间件 存储 Kafka
实时计算 Flink版产品使用问题之通过flink同步kafka数据进到doris,decimal数值类型的在kafka是正常显示数值,但是同步到doris表之后数据就变成了整数,该如何处理
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
SQL 消息中间件 分布式计算
大数据-124 - Flink State 01篇 状态原理和原理剖析:状态类型 执行分析
大数据-124 - Flink State 01篇 状态原理和原理剖析:状态类型 执行分析
269 5
|
SQL 存储 Unix
Flink SQL 在快手实践问题之设置 Window Offset 以调整窗口划分如何解决
Flink SQL 在快手实践问题之设置 Window Offset 以调整窗口划分如何解决
257 2
|
SQL 消息中间件 分布式计算
大数据-120 - Flink Window 窗口机制-滑动时间窗口、会话窗口-基于时间驱动&基于事件驱动
大数据-120 - Flink Window 窗口机制-滑动时间窗口、会话窗口-基于时间驱动&基于事件驱动
343 0
|
SQL 分布式计算 大数据
大数据-119 - Flink Window总览 窗口机制-滚动时间窗口-基于时间驱动&基于事件驱动
大数据-119 - Flink Window总览 窗口机制-滚动时间窗口-基于时间驱动&基于事件驱动
444 0
|
缓存 监控 数据处理
Flink 四大基石之窗口(Window)使用详解
在流处理场景中,窗口(Window)用于将无限数据流切分成有限大小的“块”,以便进行计算。Flink 提供了多种窗口类型,如时间窗口(滚动、滑动、会话)和计数窗口,通过窗口大小、滑动步长和偏移量等属性控制数据切分。窗口函数包括增量聚合函数、全窗口函数和ProcessWindowFunction,支持灵活的数据处理。应用案例展示了如何使用窗口进行实时流量统计和电商销售分析。
2259 28
|
数据处理 数据安全/隐私保护 流计算
Flink 三种时间窗口、窗口处理函数使用及案例
Flink 是处理无界数据流的强大工具,提供了丰富的窗口机制。本文介绍了三种时间窗口(滚动窗口、滑动窗口和会话窗口)及其使用方法,包括时间窗口的概念、窗口处理函数的使用和实际案例。通过这些机制,可以灵活地对数据流进行分析和计算,满足不同的业务需求。
1587 27
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用合集之数据库执行的是UPDATE操作,那么Flink监听到的类型是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
消息中间件 NoSQL Java
Flink-06 Flink Java 3分钟上手 滚动窗口 时间驱动 Kafka TumblingWindow TimeWindowFunction TumblingProcessing
Flink-06 Flink Java 3分钟上手 滚动窗口 时间驱动 Kafka TumblingWindow TimeWindowFunction TumblingProcessing
288 0
|
调度 流计算
Flink 新一代流计算和容错问题之Flink 中的数据可以分为什么类型
Flink 新一代流计算和容错问题之Flink 中的数据可以分为什么类型
106 3