Flink
DataFlow
数据的分类
-
有界数据
-
离线的计算
- 效率:硬件相同的情况下:时间
-
-
无界数据
-
实时的计算
- 效率:硬件环境相同的情况下,吞吐量:数据处理的数量、延迟:结果输出的时间—数据接收的时间
-
状态
- 有状态
- 无状态
窗口函数
-
滚动窗口
- 数量–时间
- 不重复
-
滑动窗口
- 可以重复
- 滑动的间隔–窗口的宽度
-
会话窗口
- 不会重复
- 基于某一个用户的未操作时间
时间
- 事件时间
- 到达时间
- 处理时间
Flink简介
大数据计算引擎
-
第一代: MapReducer
- 批处理:Mapper, Reducer
- Hadoop的MapReducer将计算分为两个阶段, 分别为Map和Reducer. 对于上层应用来说, 就不得不想方设法去拆分算法, 甚至于不得不在上层应用实现多个Job的串联, 以完成一个完整的算法, 例如迭代计算.
-
第二代: DAG框架 (Tez) + MapReducer
- 批处理 1个Tez = MR (1) + MR (2) + … + MR (n) 相比MR效率有所提升
-
第三代: Spark
- 批处理, 流处理, SQL高层API支持 自带DAG 内存迭代计算, 性能较之前大幅提升
-
第四代: Flink
- 批处理, 流处理, SQL高层API支持 自带DAG 流式计算性能更高, 可靠性更高
介绍
- 2014 年 Flink 作为主攻流计算的大数据引擎开始在开源大数据行业内崭露头角。区别于Storm、
Spark Streaming 以及其他流式计算引擎的是:它不仅是一个高吞吐、低延迟的计算引擎,同时还提供很多高级的功能。比如它提供了有状态的计算,支持状态管理,支持强一致性的数据语义以及支持 基于Event Time的WaterMark对延迟或乱序的数据进行处理等
特点
-
分布式、高性能、随时可用以及准确的流处理应用程序打造的开源流处理框架
-
框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink 被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算。
-
Flink流处理的特点
-
同时支持高吞吐,低延迟,高性能
-
支持事件时间(Event Time) 概念
- Process TIme,大多数框架窗口计算采用的都是系统时间(process time),也是事件传
输到计算框架处理时,系统主机的当前时间。 - Event Time,Flink支持基于事件时间(Event Time)语义进行窗口计算,也就是使用事
件产生的时间,这种基于事件驱动的机制使得事件即使乱序到达,流系统也能够计算出
精确的结果,保持了事件原本产生时的时序性,尽可能避免网络传输或硬件系统的影
响。
- Process TIme,大多数框架窗口计算采用的都是系统时间(process time),也是事件传
-
支持有状态计算
-
支持高度灵活的窗口(Window)操作。
-
基于轻量级的分布式快照(CheckPoint)来实现容错
-
基于JVM实现独立的内存管理
-
Save Point保存点
- CheckPoint是自动的,做容错。Save Point是手动的,处理程序升级。
-
Flink数据分类
-
有界数据
-
具有起始时间和截止时间。它可以在执行任何的计算之前,先通过摄取所有数据后再来处理有
界流。处理有界流不需要有序摄取,因为可以对有界数据集进行排序。有界流的处理也称为批
处理。 -
特点
- 有定义流的开始,也有定义流的结束。
- 有界流可以在摄取所有数据后再进行计算。
- 有界流所有数据可以被排序,所以并不需要有序摄取。
- 有界流处理通常被称为批处理
-
-
无界数据
-
它有开始时间但没有截止时间,它们在生成时提供数据,但不会被终止。无界流必须连续处理
数据,即必须在摄取事件后立即处理事件。它无法等待所有输入数据到达,因为输入是无界
的,如果是这样,在任何时间点都不会完成。处理无界数据通常要求以特定顺序摄取事件,例
如事件发生的顺序,以便能够推断结果完整性。 -
特点
- 有定义流的开始,但没有定义流的结束。它们会无休止地产生数据。
- 无界流的数据必须持续处理,即数据被摄取后需要立刻处理。我们不能等到所有数据都到达再处理,因为输入是无限的,在任何时候输入都不会完成。
- 处理无界数据通常要求以特定顺序摄取事件,例如事件发生的顺序,以便能够推断结果的完整性。
-
Flink 擅长精确的时间控制和状态化,使得 Flink 的运行时(runtime)能够运行任何处理无界流的应用。
-
性能对比
- Flink是一行一行处理,而SparkStream是基于数据片集合(RDD)进行小批量处理,所以Spark在流式处理方面,不可避免增加一些延时。
- Flink的流式计算跟Storm性能差不多,支持毫秒级计算,而Spark则只能支持秒级计算。
- Spark和Flink全部都运行在Hadoop Yarn上, 性能为Flink >