一、运行时架构
上一篇我们可以看到Flink的核心组件的Deploy层,该层主要涉及了Flink的部署模式,Flink支持多种部署模式:本地、集群(Standalone/YARN)、云(GCE/EC2)。
-
Local(本地):单机模式,一般本地开发调试使用,像我们程序写的WordCountStream那个例子,直接运行main方法启动。
-
Cluster(集群)
- Standalone(独立模式):Flink自带集群,自己管理资源调度,生产环境也会有所应用。
- YARN(YARN模式):计算资源统一由Hadoop YARN管理,生产环境应用较多。
-
Cloud(云端):AliCloud Realtime Compute、Amazon EMR、Huawei Cloud Stream Service 等。
我们这里主要来介绍Cluster集群的两种模式Standalone、YARN。
二、YARN集群架构
在讲解Flink集群架构之前,我们先了解一下YARN集群架构,我觉得是很有必要的。YARN集群总体上是经典的主/从(Master/Slave)架构,主要由ResourceManager、NodeManager、ApplicationMaster和Container等几个组件构成。
2.1 ResourceManager
以后台进程的形式运行,负责对集群资源进行统一管理和任务调度。ResourceManager的主要职责如下:
- 接收来自客户端的请求。
- 启动和管理各个应用程序的ApplicationMaster。
- 接收来自ApplicationMaster的资源申请,并为其分配Container。
- 管理NodeManager,接收来自NodeManager的资源和节点健康情况汇报。
2.2 NodeManager
集群中每个节点上的资源和任务管理器,以后台进程的形式运行。它会定时向ResourceManager汇报本节点上的资源(内存、CPU)使用情况和各个Container的运行状态,同时会接收并处理来自ApplicationMaster的Container启动/停止等请求。NodeManager不会监视任务,它仅监视Container中的资源使用情况,例如。如果一个Container消耗的内存比最初分配的更多,就会结束该Container。
2.3 Task
应用程序具体执行的任务。一个应用程序可能有多个任务,例如一个MapReduce程序可以有多个Map任务和多个Reduce任务。
2.4 Container
YARN中资源分配的