Flink 基本架构与组件

Flink 基本组件

Flink 的架构体系同样遵循着分层的架构设计理念,在降低耦合度的同时,也为上层用户构建Flink应用程序提供了丰富且友好的接口。
Flink 的架构体系分为三层,由上到下一次是API & Libraries & Runtime 核心层和物理部署层。

Flink 基本架构与组件_第1张图片

API & Libraries 层

Flink提供了支持流式计算和批计算的接口,通过在此基础之上抽象出不同应用类型的组件库,比如:基于流式处理的CEP(复杂事件处理)、SQL & Table 库、基于批处理的FlinkML、Gelly(图处理库)等,API层包括DataStream API 和批计算的DataSetAPI,两者都提供给用户丰富的数据处理高级API,比如Map、FlatMap、KeyBy等,用户也可以通过ProcessFunction API直接操作状态和时间的底层数据。

RunTime核心层

该层主要负责对上层不同接口提供基础服务,也是Flink 分布式计算框架的核心实现层,支持分布式Stream作业的执行,JobGraph到ExecutionGraph 的映射转换、任务调度等

物理部署层

主要涉及Flink的部署模式,目前Flink支持多种部署模式,包括本地模式、集群模式(StandAlone、yarn)、K8s、云(GCE、EC2)等,用户可以根据需要选择使用对应的部署模式。


基本架构

Flink也是遵循Master-Slave 架构设计原则,JobManager为Master节点,TaskManager为Worker节点,组件之间的通信是通过Akka 来实现,包括任务的状态以及CheckPoint触发信息。
Flink 基本架构与组件_第2张图片
上图架构当中主要涉及到三个部分:Client、JobManager、TaskManager 下面依次进行讲解

Client客户端

客户端负责将任务提交到集群上面,Client与JobManager构建Akka连接,然后将任务提交到JobManager,通过Client和JobManager之间进行交互获取任务执行状态。客户端提交任务可以采用Flink WEB UI 的方式,也可以采用命令行的方式进行提交。

JobManager

jobManager负责整个Flink 集群任务的调度以及资源的管理,从客户端中获取提交的应用,然后根据集群中的TaskManager上面TaskSlot的使用情况,为提交的应用分配相应的TaskSlots 资源并命令TaskManager启动从客户端中获取的应用,JobManager相当于整个集群的Master节点,整个集群只有一个active状态的Jobmanager,负责整个集群的资源管理和任务管理,JobManager和TaskManager之间通过Actor System进行通信获取任务执行的情况,并通过Actor System将应用的执行情况发送给客户端。同时在任务的执行过程中Flink JobManager会触发Checkpoints 操作,每个Taskmanager 节点收到CheckPoint 触发指令后,完成CheckPoint操作,所有的CheckPoint协调过程都是在Flink JobManager 中完成,任务结束之后Flink会将任务执行的信息反馈给客户端,并且释放掉TaskManager的资源供下一次的提交使用。

Taskmanager

TaskManager相当于整个集群的Slave节点,负责具体的任务执行和对应任务在每个节点上的资源申请与管理,客户端通过将编写好的Flink应用编译打包,提交到JobManager,然后Jobmanager 会根据已经注册在JobManager中的资源情况,将任务分配给有资源的TaskManager节点,然后启动并运行任务,Taskmanager从Jobmanager接收需要部署的任务,然后使用Slot资源启动Task,建立数据接入的网络连接,接收数据并开始数据处理,同时TaskManager 之间的数据交互都是通过数据流的方式进行的。

Flink 的任务运行其实是采用多线程的方式,这和MR的多进程方式有很大的区别,Flink能够极大的提高CPU使用效率,在多个任务和Task之间通过TaskSlot方式共享系统资源,每个TaskManager中通过管理多个TaskSlot资源池进行对资源的有效管理。

你可能感兴趣的:(Flink,系列)