Flink
来自智得网
简介
Flink是一个分布式的流处理开源框架,其前身是柏林理工大学的内部研究性项目, 2014 Flink 纳入 Apache 孵化器,现是 Apache 基金会的顶级项目之一。
Fink 框架由 Java 语言进行开发。
Flink可以高效处理批处理任务以及流式处理任务,批流一体是Flink数据处理的理念之一,批处理作为流处理的特例进行处理。
Flink的主要特点如下:
Flink是一个大规模分布式系统;
Flink可以处理乱序数据,在乱序场景下保证结果的正确性;
Flink保存状态,可以保证确保仅一次处理(exactly-once);
Flink处理流式数据延时较低,吞吐量大。
原理
Flink架构中,Flink的结点分为JobManager和TaskManager。
名词解释
名词 | 职责 |
---|---|
客户端 | 提交执行程序(一般是Jar包)和数据,可以同步等待结果返回或者提交任务之后断开连接。 |
JobManager | 接收客户端提交的job,生成执行计划;
调度TashManager去执行任务; 接收TaskManager提交的心跳和汇报消息。 |
TaskManager | 任务的执行节点,在任务执行过程中给JobManager提交心跳和汇报信息。 |
Task Slot | TaskManager的计算资源的子集,TaskManager的计算资源(内存资源,不进行CPU隔离)会平均分为多份,每份供一个Slot使用。
每个Slot可以执行不同的Task,但是不同的Task在某些场景下也会共享Slot。 |
Operator Chain | 多个不同的算子的task连接在一起可以组成一个新的task,称为Operator Chain。
Operator Chain中的多个任务在一个线程执行,可以减少上下文切换成本和数据序列化反序列化的成本。 |
并行度 | Flink使用并行度来定义某一个任务被切分成多少个子任务。 |
执行流程
Flink的一个任务可以用Dataflow进行描述,Dataflow有一个或者多个的输入数据流(Source),有一个或者多个的输出结果(Sink)。Dataflow处理过程中的操作称算子(operator)。
Flink任务最终通过Flink程序执行,所有的Flink程序都是由Source 、Transformation 和 Sink组成。
- Source 负责数据源的读取,所有的Flink程序都会以一个或多个sources开始。
- Transformation 利用各种算子进行处理加工,多数情况下,程序中的转换运算(transformations)跟dataflow中的算子 (operator)是一一对应的关系。
- Sink 负责Flink程序的输出。