1、集群架构

image.png

1)JobManager:
主要作用:整个集群资源的管理以及相应的一些调度工作
image.png

  • checkpoint的协调和执行:通过文件检查点的方式记录一些状态性的数据
  • jobGraph生成Execution Graph
  • Task部署与调度
  • RPC的通信:基于Akka实现的,核心组件:Actor System
  • 对Job的接收:Job的拆分与分发
  • ResourceManager:集群资源管理器
  • TaskManager注册与管理

2)TaskManager
image.png

  • TaskManager是JVM的话,Task Slot是线程;
  • Data交换:shuffle过程,提供shuffle Environment管理,Network Manager基于netty实现
  • RPC通信:TaskManager与JobManager交互通过AKKa实现
  • 内存管理:Memory Manager
  • 向RM注册
  • 为JobManager提供Slot

3)Client
image.png

  • 执行main方法:
  • 生成JobGraph:有向无环图
  • 执行环境管理:Context Environment
  • Job提交与运行
  • 依赖Jar包ship到JobManager
  • 通过RPC与JobManager通信:基于Akka实现
  • 集群部署

2、JobGraph

image.png

  • 通过反射的方式调用application的main方法;
  • Executor执行器:本地执行器、远程执行器,on YARN执行器,
  • execute生成StreamGraph
  • submit方法将jobGraph提交到JobManager

3、集群部署模式

分类条件:

  • 集群的生命周期和资源隔离
  • 根据main方法执行在Client还是JobManager

分类:

  • Session Mode
    • 共享JobManager和TaskManager,所有提交的Job都在一个Runtime中运行
  • Per-Job Mode
    • 独享JobManager和TaskManager,好比为每个Job单独启动一个Runtime
  • Application Mode
    • Application的main运行在cluster上,而不在客户端
    • 每个Application对应一个Runtime,Application中可以包含多个Job

1)Session Mode
image.png
Session集群运行模式:

  • JM与TM共享
  • 客户端通过RPC或Rest API连接集群的管理节点
  • Deployer需要上传依赖的Jar包
  • Deployer需要生成JobGraph,并提交到管理节点
  • JM的生命周期不受提交的Job影响,会长期运行

优点:

  • 资源充分共享,提升资源利用率
  • Job在Flink Session集群中管理,运维简单

缺点:

  • 资源隔离相对较差
  • 非Native类型部署,TM不易拓展,Slot计算资源伸缩性较差

2)Per-job运行模式
image.png
Per-Job类型集群:

  • 单个Job独享JM和TM
  • TM中Slot资源根据Job指定
  • Deployer需要上传依赖的Jar包
  • 客户端生成JobGraph,并提交到管理节点
  • JM的生命周期和Job生命周期绑定

优势:

  • Job和Job之间资源隔离充分
  • 资源根据Job需要进行申请,TM Slot数量可以不同

缺点:

  • 资源相对比较浪费,JM需要消耗资源
  • Job管理完全交给ClusterManager,管理复杂

Session集群和Per-Job集群的问题:
image.png

  • 作业提交是阻塞的,如果大量用户提交作业的话,会造成大面积的任务等待

3)Application Mode
image.png
Application Mode类型集群(1.11):

  • 每个Application对应一个JM,且可以运行多个Job
  • 客户端无需将依赖上传到JM,仅负责管理Job的提交与管理
  • main方法运行在JM中,将JobGraph的生成放在集群上运行,客户端压力降低

优点:

  • 有效降低带宽消耗和客户端负载
  • Application实现资源隔离,Application中实现资源共享

缺点:

  • 功能太新,未经生产验证(阿里内部应该是这种模式)
  • 仅支持Yarn和Kubunetes(需要构建镜像)

4、Flink支持的资源管理器

  • standalone
  • Hadoop Yarn
  • Apache Mesos
  • Docker
  • Kubernetes

image.png
Native集群部署:

  • 当在CLusterManager上启动Session集群时,只启动JM,不启动有TM
  • 当提交Job-1后根据Job的资源申请,动态启动TM满足计算需求
  • 当启动Job-2,Job-3后,再次向CLusterManager中申请TM资源

image.png

5、Standalone集群

特点:

  • 分布式多台物理主机部署
  • 依赖Java8或Java11JDK环境
  • 仅支持Session模式提交Job
  • 支持高可用配置

image.png
Mater节点进程名:StandaloneSessionCLusterEntrypoint
TaskManager节点进程名:TaskManagerRunner