Flink的窗口类型详解

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 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轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
6月前
|
消息中间件 存储 Kafka
实时计算 Flink版产品使用问题之通过flink同步kafka数据进到doris,decimal数值类型的在kafka是正常显示数值,但是同步到doris表之后数据就变成了整数,该如何处理
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
2月前
|
SQL 消息中间件 分布式计算
大数据-124 - Flink State 01篇 状态原理和原理剖析:状态类型 执行分析
大数据-124 - Flink State 01篇 状态原理和原理剖析:状态类型 执行分析
69 5
|
2月前
|
SQL 消息中间件 分布式计算
大数据-120 - Flink Window 窗口机制-滑动时间窗口、会话窗口-基于时间驱动&基于事件驱动
大数据-120 - Flink Window 窗口机制-滑动时间窗口、会话窗口-基于时间驱动&基于事件驱动
98 0
|
2月前
|
SQL 分布式计算 大数据
大数据-119 - Flink Window总览 窗口机制-滚动时间窗口-基于时间驱动&基于事件驱动
大数据-119 - Flink Window总览 窗口机制-滚动时间窗口-基于时间驱动&基于事件驱动
73 0
|
4月前
|
SQL 存储 Unix
Flink SQL 在快手实践问题之设置 Window Offset 以调整窗口划分如何解决
Flink SQL 在快手实践问题之设置 Window Offset 以调整窗口划分如何解决
66 2
|
7月前
|
SQL 关系型数据库 数据库
实时计算 Flink版操作报错之使用SQL 将 PostgreSQL 的 date 类型字段转换为 TIMESTAMP 类型时遇到报错,该如何处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
2月前
|
消息中间件 NoSQL Kafka
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
152 0
|
2月前
|
消息中间件 NoSQL Java
Flink-06 Flink Java 3分钟上手 滚动窗口 时间驱动 Kafka TumblingWindow TimeWindowFunction TumblingProcessing
Flink-06 Flink Java 3分钟上手 滚动窗口 时间驱动 Kafka TumblingWindow TimeWindowFunction TumblingProcessing
42 0
|
7月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用合集之数据库执行的是UPDATE操作,那么Flink监听到的类型是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
7月前
|
Oracle 关系型数据库 MySQL
实时计算 Flink版操作报错之在处理MySQL的DECIMAL类型时出现了报错,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。