vlambda博客
学习文章列表

Flink入门实践-架构简介(一)

  Apache Flink 是一个框架和分布式处理引擎,用于在 无边界 有界 据流上进行 有状态 的计算。Flink 能在所有常见集群环境中运行,并能以 内存速度 任意规模进 行计算。

一、集群架构

1.1 Client

 Client为集群客户端其主要功能有一些三大部分:

1、任务管理。任务提交、任务取消、任务状态获取、触发Savepoint.

2、 集群的管理。创建集群、停止集群。

3、Application Code 执行。执行环境构建、用户程序打包、StreamGraph-->JobGraph构建。

Flink入门实践-架构简介(一)


1.2 JobManager
JobManager相当于集群的Master节点。负责整个集群任务的调度、资源管理、Checkpoint协调等功能,其包含核心组件如下:
1、ResourceManager:负责集群中资源(Slots)管理(申请、分配、回收、调度)。
2、Dispatcher:主要负责任务的执行调度以及JobMaster的启动,它同时还作为Flink WebUI的后端接口服务层,提供作业执行的相关信息。
3、JobMaster:负责管理单个JobGraph的执行。Flink集群中可以同时运行多个作业,每个作业都有自己的JobMaster。(当任务为HA模式时,会有多个JobMaster,但活跃的只有一个,其他的都是备选状态)
4、Checkpoint Coordinator: checkpoint协调器根据用户配置的Checkpoint策略,周期性发起Checkpoint。

1.3 TaskManager

TaskManager相当于整个集群中的Work节点,负责具体的任务执行和对应任务在每个节点上的资源申请和管理。当TaskManager接收到JobManager部署任务后,使用Slot资源启动对应的Task,建立数据接入的网络连接,然后接收数据并开始进行数据处理。

二、组件结构


Flink入门实践-架构简介(一)

 

2.1 API&Library层

编程接口包括处理无界数据流的DataStream API和处理有界数据流的DataSet API。
Library
1、State Process API是1.9版本以后提供的一套用于操作(读取、写入、修改)Savepoint和Checkpoint数据的接口。
2、复杂事件处理库(Complex Event Processing,CEP),用于定义以下事件匹配模式。
3、Table&SQL 用于结构化数据处理的库,用户可以通过SQL实现无界或者有界流的数据处理。
4、Gelly为图形处理库,提供了图的相关计算接口,例如出入度计算、重复边删除、图遍历、最短路径计算等
5、基于批处理的机器学习库(Flink ML)

2.2 Runtime核心层

Flink 分布式计算框架的核心实现层,包括作业转换、任务调度、资源分配、任务执行等。

2.3 物理部署 层

Flink任务的物理部署层,支持任务在不同模式,不同平台部署运行Flink任务。

三、编程模型

3.1 运行时接口分层

Flink入门实践-架构简介(一)


1、Stateful Stream Processing 为最低级别的抽象,通过抽象的Process Function函数内嵌到DataStream/DataSet API中。通过这种Function粒度的抽象,允许用户进行最大自由度的拓展来实现业务场景的数据处理功能。
2、Core APIs层抽象包含无界流场景处理接口DataStream API和有界流处理场景接口DataSet API。这两类接口为数据处理提供了一些通用的模块组件例如流的关联、窗口操作、状态操作等。
3、Table API抽象层,是以Table为中心的声明式编程API,其提供了类似于关系型模型中的操作功能例如select、aggregate、join等。用户通过声明的方式定义数据处理逻辑。
4、 顶层抽象层SQL。用户可以通过编写SQL语句的方式实现数据处理逻辑。

3.2 编程模式

Flink的编程模式包括三大阶段即数据源的定义(Source)、数据转换定义(Transformation)、数据输出的定义(Sink)。
1、数据源定义是指定处理的流数据是来自哪里。Flink本身提供了丰富的连接器能够快速地接入外部数据源。
2、数据转换定义是用户基于接入的流数据结合业务需求对数据进行多阶段的处理。
3、数据输出的定义是将处理后的结果写入到指定的外部存储层。