Flink 引擎初理解之Flink架构| 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的第1天。
一、什么是Flink
简单来说,Apache Flink 是一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。
二、Flink分层架构
Flink核心组件栈分为三层:API&Libraries层、Runtime核心层和物理部署层。
- 物理部署层。Flink的底层是物理部署层。Flink可以采用Local模式运行,启动单个JVM,也可以采用Standalone集群模式运行,还可以采用YARN集群模式运行,或者也可以运行在GCE(谷歌云服务)和EC2(亚马逊云服务)上。
- Runtime核心层。该层主要负责对上层不同接口提供基础服务,也是Flink分布式计算框架的核心实现层。该层提供了两套核心的API,DataStream API(流处理)和DataSet API(批处理)。Flink Runtime 层的整个架构采用了标准 Master-Slave 的结构,即总是由一个Flink JobManager和一个或多个Flink TaskManager组成。
- API&Libraries层。作为分布式数据库处理框架,Flink同时提供了支撑流计算和批计算的接口,同时,在此基础上抽象出不同的应用类型的组件库,如CEP(基于流处理的复杂事件处理库)、SQL&Table库(既可以基于流处理,也可以基于批处理)、FlinkML(基于批处理的机器学习库)、Gelly(基于批处理的图计算库)等。
三、Flink运行架构
Client
Client不是运行时和程序执行的一部分,而是用于准备数据流并向JobManager发送数据流。
JobManager
它决定何时计划下一个任务(或一组任务),对完成的任务或执行失败做出反应,协调CheckPoint,并协调故障恢复等。总的来说,它负责申请资源,协调以及控制整个job的执行过程。始终至少有一个 JobManager。高可用(HA)设置中可能有多个 JobManager,其中一个始终是 leader,其他的则是 standby。JM由以下三个组件组成。
-
ResourceManager
ResourceManager 负责 Flink 集群中的Task Slots(Flink集群中资源调度的单位)资源解除、分配和配置 。Flink 为不同的环境和资源提供商(如 YARN、Kubernetes 和独立部署)实现了多个 ResourceManagers。
-
Dispatcher
提供了一个 REST 接口来提交 Flink 作业以供执行,并为每个提交的作业启动一个新的 JobMaster。它还运行 Flink WebUI 以提供有关作业执行的信息。
-
JobMaster
JobMaster负责管理单个JobGraph的执行。多个作业可以在一个 Flink 集群中同时运行,每个作业都有自己的 JobMaster。
TaskManagers
任务管理器(也称为工作线程)执行数据流的任务,并缓冲和交换数据流。可以有多个。负责接收并执行JobManager发送的task。