Flink

来自智得网
跳转至: 导航、​ 搜索

简介

Flink的logo

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程序的输出。