本文转载自:https://ververica.cn/develope…
作者:周凯波(宝牛)
Flink 架构概览
Flink 架构概览–Job
用户通过 DataStream API、DataSet API、SQL 和 Table API 编写 Flink 工作,它会生成一个 JobGraph。JobGraph 是由 source、map()、keyBy()/window()/apply() 和 Sink 等算子组成的。当 JobGraph 提交给 Flink 集群后,可能以 Local、Standalone、Yarn 和 Kubernetes 四种模式运行。
Flink 架构概览–JobManager
JobManager 的性能次要有:
- 将 JobGraph 转换成 Execution Graph,最终将 Execution Graph 拿来运行
- Scheduler 组件负责 Task 的调度
- Checkpoint Coordinator 组件负责协调整个工作的 Checkpoint,包含 Checkpoint 的开始和实现
- 通过 Actor System 与 TaskManager 进行通信
- 其它的一些性能,例如 Recovery Metadata,用于进行故障复原时,能够从 Metadata 外面读取数据。
Flink 架构概览–TaskManager
TaskManager 是负责具体任务的执行过程,在 JobManager 申请到资源之后开始启动。TaskManager 外面的次要组件有:
- Memory & I/O Manager,即内存 I/O 的治理
- Network Manager,用来对网络方面进行治理
- Actor system,用来负责网络的通信
TaskManager 被分成很多个 TaskSlot,每个工作都要运行在一个 TaskSlot 外面,TaskSlot 是调度资源里的最小单位。
在介绍 Yarn 之前先简略的介绍一下 Flink Standalone 模式,这样有助于更好地理解 Yarn 和 Kubernetes 架构。
- 在 Standalone 模式下,Master 和 TaskManager 能够运行在同一台机器上,也能够运行在不同的机器上。
- 在 Master 过程中,Standalone ResourceManager 的作用是对资源进行治理。当用户通过 Flink Cluster Client 将 JobGraph 提交给 Master 时,JobGraph 先通过 Dispatcher。
- 当 Dispatcher 收到客户端的申请之后,生成一个 JobManager。接着 JobManager 过程向 Standalone ResourceManager 申请资源,最终再启动 TaskManager。
- TaskManager 启动之后,会有一个注册的过程,注册之后 JobManager 再将具体的 Task 工作分发给这个 TaskManager 去执行。
以上就是一个 Standalone 工作的运行过程。
Flink 运行时相干组件
接下来总结一下 Flink 的根本架构和它在运行时的一些组件,具体如下:
- Client: 用户通过 SQL 或者 API 的形式进行工作的提交,提交后会生成一个 JobGraph。
- JobManager:JobManager 承受到用户的申请之后,会对工作进行调度,并且申请资源启动 TaskManager。
- TaskManager: 它负责一个具体 Task 的执行。TaskManager 向 JobManager 进行注册,当 TaskManager 接管到 JobManager 调配的工作之后,开始执行具体的工作。
Flink on Yarn 原理及实际
Yarn 架构原理–总览
Yarn 模式在国内应用比拟宽泛,基本上大多数公司在生产环境中都应用过 Yarn 模式。首先介绍一下 Yarn 的架构原理,因为只有足够理解 Yarn 的架构原理,能力更好的晓得 Flink 是如何在 Yarn 上运行的。
Yarn 的架构原理如上图所示,最重要的角色是 ResourceManager,次要用来负责整个资源的治理,Client 端是负责向 ResourceManager 提交工作。
用户在 Client 端提交工作后会先给到 Resource Manager。Resource Manager 会启动 Container,接着进一步启动 Application Master,即对 Master 节点的启动。当 Master 节点启动之后,会向 Resource Manager 再从新申请资源,当 Resource Manager 将资源分配给 Application Master 之后,Application Master 再将具体的 Task 调度起来去执行。
Yarn 架构原理–组件
Yarn 集群中的组件包含:
- ResourceManager (RM):ResourceManager (RM) 负责解决客户端申请、启动 / 监控 ApplicationMaster、监控 NodeManager、资源的调配与调度,蕴含 Scheduler 和 Applications Manager。
- ApplicationMaster (AM):ApplicationMaster (AM) 运行在 Slave 上,负责数据切分、申请资源和调配、工作监控和容错。
- NodeManager (NM):NodeManager (NM) 运行在 Slave 上,用于单节点资源管理、AM/RM 通信以及汇报状态。
- Container:Container 负责对资源进行形象,包含内存、CPU、磁盘,网络等资源。
Yarn 架构原理–交互
以在 Yarn 上运行 MapReduce 工作为例来解说下 Yarn 架构的交互原理:
- 首先,用户编写 MapReduce 代码后,通过 Client 端进行工作提交
- ResourceManager 在接管到客户端的申请后,会调配一个 Container 用来启动 ApplicationMaster,并告诉 NodeManager 在这个 Container 下启动 ApplicationMaster。
- ApplicationMaster 启动后,向 ResourceManager 发动注册申请。接着 ApplicationMaster 向 ResourceManager 申请资源。依据获取到的资源,和相干的 NodeManager 通信,要求其启动程序。
- 一个或者多个 NodeManager 启动 Map/Reduce Task。
- NodeManager 一直汇报 Map/Reduce Task 状态和停顿给 ApplicationMaster。
- 当所有 Map/Reduce Task 都实现时,ApplicationMaster 向 ResourceManager 汇报工作实现,并登记本人。
Flink on Yarn–Per Job
Flink on Yarn 中的 Per Job 模式是指每次提交一个工作,而后工作运行实现之后资源就会被开释。在理解了 Yarn 的原理之后,Per Job 的流程也就比拟容易了解了,具体如下:
- 首先 Client 提交 Yarn App,比方 JobGraph 或者 JARs。
- 接下来 Yarn 的 ResourceManager 会申请第一个 Container。这个 Container 通过 Application Master 启动过程,Application Master 外面运行的是 Flink 程序,即 Flink-Yarn ResourceManager 和 JobManager。
- 最初 Flink-Yarn ResourceManager 向 Yarn ResourceManager 申请资源。当调配到资源后,启动 TaskManager。TaskManager 启动后向 Flink-Yarn ResourceManager 进行注册,注册胜利后 JobManager 就会调配具体的工作给 TaskManager 开始执行。
Flink on Yarn–Session
在 Per Job 模式中,执行完工作后整个资源就会开释,包含 JobManager、TaskManager 都全副退出。而 Session 模式则不一样,它的 Dispatcher 和 ResourceManager 是能够复用的。Session 模式下,当 Dispatcher 在收到申请之后,会启动 JobManager(A),让 JobManager(A) 来实现启动 TaskManager,接着会启动 JobManager(B) 和对应的 TaskManager 的运行。当 A、B 工作运行实现后,资源并不会开释。Session 模式也称为多线程模式,其特点是资源会始终存在不会开释,多个 JobManager 共享一个 Dispatcher,而且还共享 Flink-YARN ResourceManager。
Session 模式和 Per Job 模式的利用场景不一样。Per Job 模式比拟适宜那种对启动工夫不敏感,运行工夫较长的工作。Seesion 模式适宜短时间运行的工作,个别是批处理工作。若用 Per Job 模式去运行短时间的工作,那就须要频繁的申请资源,运行完结后,还须要资源开释,下次还需再从新申请资源能力运行。显然,这种工作会频繁启停的状况不适用于 Per Job 模式,更适宜用 Session 模式。
Yarn 模式特点
Yarn 模式的长处有:
- 资源的对立治理和调度。Yarn 集群中所有节点的资源(内存、CPU、磁盘、网络等)被形象为 Container。计算框架须要资源进行运算工作时须要向 Resource Manager 申请 Container,YARN 依照特定的策略对资源进行调度和进行 Container 的调配。Yarn 模式能通过多种任务调度策略来利用进步集群资源利用率。例如 FIFO Scheduler、Capacity Scheduler、Fair Scheduler,并能设置工作优先级。
- 资源隔离:Yarn 应用了轻量级资源隔离机制 Cgroups 进行资源隔离以防止互相烦扰,一旦 Container 应用的资源量超过当时定义的上限值,就将其杀死。
- 主动 failover 解决。例如 Yarn NodeManager 监控、Yarn ApplicationManager 异样复原。
Yarn 模式尽管有不少长处,然而也有诸多毛病, 例如运维部署老本较高,灵活性不够。