Flink学习笔记 --- Flink中Windows机制
来源:互联网 发布:sql server2000下载 编辑:程序博客网 时间:2024/05/22 15:10
Flink 认为 Batch 是 Streaming 的一个特例,所以 Flink 底层引擎是一个流式引擎,在上面实现了流处理和批处理。
而窗口(window)就是从 Streaming 到 Batch 的一个桥梁。Flink 提供了非常完善的窗口机制,这是我认为的 Flink
的亮点之一(其他包括消息乱序处理,和 checkpoint 机制)。
首先什么是Windows
在流处理应用中,数据是连续不断的,因此我们不可能等到所有数据都到了才开始处理。当然我们可以每来一个消息
就处理一次,但是有时我们需要做一些聚合类的处理,例如:在过去的1分钟内有多少用户点击了我们的网页。在这
种情况下,我们必须定义一个窗口,用来收集最近一分钟内的数据,并对这个窗口内的数据进行计算。
窗口可以是时间驱动的(Time Window,例如:每30秒钟),也可以是数据驱动的(Count Window,例如:每一百个元素)。
一种经典的窗口分类可以分成:翻滚窗口(Tumbling Window,无重叠),滚动窗口(Sliding Window,有重叠),和会话
窗口(Session Window,活动间隙)。
例如,淘宝网会记录每个用户每次购买的商品个数,我们要做的是统计不同窗口中用户购买商品的总数。下图给出了几种经典的
窗口切分概述图:
【注】:raw data stream 代表用户的购买行为流,圈中的数字代表该用户本次购买的商品个数,事件是按时间分布的,
所以可以看出事件之间是有time gap的。Flink 提供了上图中所有的窗口类型
Time Window
Time Window 是根据时间对数据流进行分组的。这里我们涉及到了流处理中的时间问题,时间问题和消息乱序问题是紧密关联的,
这是流处理中现存的难题之一,我们将在后续的 EventTime 和消息乱序处理中对这部分问题进行深入探讨。这里我们只需要知道
Flink 提出了三种时间的概念,分别是event time(事件时间:事件发生时的时间),ingestion time(摄取时间:事件进入流
处理系统的时间),processing time(处理时间:消息被计算处理的时间)。Flink 中窗口机制和时间类型是完全解耦的,也就是
说当需要改变时间类型时不需要更改窗口逻辑相关的代码。
Tumbling Time Window
如上图,我们需要统计每一分钟中用户购买的商品的总数,需要将用户的行为事件按每一分钟进行切分,
这种切分被成为翻滚时间窗口(Tumbling Time Window)。翻滚窗口能将数据流切分成不重叠的窗口,
每一个事件只能属于一个窗口。通过使用 DataStream API,我们可以这样实现:
Sliding Time Window
但是对于某些应用,它们需要的窗口是不间断的,需要平滑地进行窗口聚合。比如,
我们可以每30秒计算一次最近一分钟用户购买的商品总数。这种窗口我们称为滑动时间窗口
(Sliding Time Window)。在滑窗中,一个元素可以对应多个窗口。通过使用 DataStream API,我们可以这样实现:
Count Window
Tumbling Count Window
就会对窗口进行计算,这种窗口我们称之为翻滚计数窗口(Tumbling Count Window),上图所示
窗口大小为3个。通过使用 DataStream API,我们可以这样实现:
Sliding Count Window
Session Window
- Flink学习笔记 --- Flink中Windows机制
- Flink学习笔记:1、Flink快速入门
- Flink学习笔记:2、Flink介绍
- 《Flink学习笔记一》
- Flink学习笔记 --- DataStream Transformations
- Flink
- Flink学习笔记 --- Flink本地(Loacl模式)安装
- Flink学习笔记:3、Flink分布式模式(Standalone)
- Flink学习笔记 --- Basic Concepts整理笔记
- Flink Basic API Concepts 学习笔记&译文
- Flink学习笔记 --- DataSet Source and Sink
- Flink学习笔记 --- Intellij自动导入
- Flink学习笔记 --- 理解ConnectedStream 与 Union
- Flink学习笔记 --- 理解DataStream WordCount
- Flink学习笔记 --- 理解DataSet WordCount
- Flink学习笔记 --- 研究 FlinkForward2017 源码
- Flink学习笔记 --- WaterMark机制 and low WaterMark 保序机制
- 解读Flink中轻量级的异步快照机制--Flink 1.2 源码
- Swift循环遍历集合方法总结
- 23种设计模式之中介者模式
- Pycharm的Debug调试基础
- 30分钟学会如何使用Shiro
- selenium+phantomjs 爬虫 获取中国移动,电信,联通通话记录
- Flink学习笔记 --- Flink中Windows机制
- 内存溢出与内存泄漏的区别
- java反射机制
- win10下安装tomcat7.0
- JAVA OOP(一)——OOP概念,类与对象
- C++智能指针实现及改进
- 发布项目至服务器
- Maven 编译错误 Dynamic Web Module 3.0 requires Java 1.6 or newer 解决方案
- 基础算法(三)---二分排序(Java)