Flink 运行时架构

Flink 运行时的组件

在这里插入图片描述

  • 作业管理器(JobManager)
  • 资源管理器(ResourceManager)
  • 任务管理器(TaskManager)
  • 分发器(Dispatch)

JobManager

  • 控制一个应用程序执行的主进程,也就是说,每个应用程序都会被一个不同的 JobManager 所控制执行;
  • JobManager 会先接收到要执行的应用程序,这个应用程序,这个应用程序包括作业图(JobGraph)、逻辑数据流图(logical dataflow graph)和打包了所有类、库和其他资源的JAR包;
  • JobManager 会把 JobGraph 转换成一个物理层面的数据流图,这个图叫做执行图(ExecutionGraph),包含了所有可以并发执行的任务;
  • JobManager 会向 ResourceManager 请求执行任务必要的资源,也就是 TaskManager 上的 slot 。一旦它获取到了足够的资源,就会将执行图分发到真正运行它们的 TaskManager 上。而在运行过程中,JobManager 会负责所有需要中央协调的操作,比如所 checkpoint 的协调;

ResourceManager

  • 主要负责管理 TaskManager 和 slot;
  • Flink 为不同环境和资源管理工具提供了不同的 ResourceManager,比如Yarn、Mesos、K8s,以及 standalone部署;
  • 当 JobManager 申请 slot 资源时,ResourceManager 会将有空闲 slot 的 TaskManager 分配给 JobManager。如果 ResourceManager 没有足够的 slot 来满足 JobManager 的请求,它还可以向资源提供平台发起会话,以提供启动 TaskManager 进程的容器;

TaskManager

  • Flink 中的工作进程。通常在 Flink 中会有多个 TaskManager 运行,每一个 TaskManager 都包含一定数量的 slot 。slot 的数量限制了 TaskManager 能够执行的任务数量(并行度);
  • 启动之后,TaskManager 会向 ResourceManager 注册它的 slot ;收到 ResourceManager 的指令后,TaskManager 就会将一个或者多个 slot 提供给 JobManager 调用。JobManager 就可以向 slot 分配任务来执行了;
  • 在执行过程中,一个 TaskManager 可以跟其他运行同一应用程序的 TaskManager 交换数据;

Dispatcher

  • 可以跨作业运行,它为应用提交提供了 REST 接口;
  • 当一个应用被提交时,Dispatcher 就会启动并将应用移交给一个 JobManager;
  • Dispatcher 也会启动一个 Web UI,用来方便地展示和监控作业执行的信息;
  • Dispatcher 在架构中可能并不是必需的,这取决于应用提交的方式;

Flink 任务提交流程

在这里插入图片描述

  1. 当程序执行 execute() 方法时,Client 会将程序编译成一个 DAG(有向无环图),这个图被称为 JobGraph ,JobGraph 描述了程序的数据流和操作;
  2. Dispatcher 将 JobGraph 提交给 JobManager;
  3. JobManager 接收到 JobGraph 后会将其解析,并创建一个 ExecutionGraph,ExecutionGraph 描述了如何在集群中并行执行 JobGraph 中定义的数据流;
  4. JobManager 根据 ExecutionGraph 的需求向 ResourceManager 请求资源;
  5. 一旦资源被分配,JobManager 会将作业分解成一系列的 Task ,然后将这些 Task 分配给集群中 TaskManager ,每个 TaskManager 执行一个或多个 Task;
  6. TaskManager 接收到 Task 后会在本地执行它们;
  7. TaskManager 会定期保存状态快照,并向 JobManager 报告任务的进度和状态;
  8. 当所有 Task 都成功执行完毕,JobManager 会标记作业为完成,并且释放所有分配的资源;

以上是从一个较为高级的视角,来看应用中各组件的交互协作。如果部署的集群环境不同,其中一些步骤可以省略,或是有些组件会运行在同一个 JVM 进程中。

下面以具体部署到 Yarn 上为例:
在这里插入图片描述

  1. Flink 提交任务后,Client 向 HDFS 上传 Flink 的 Jar 包和配置;
  2. Client 向 ResourceManager 提交任务,ResourceManager 分配 Container 资源并通知对应的 NodeManager 启动 ApplicationMaster,ApplicationMaster 启动后加载 Flink 的 Jar 包和配置构建环境,然后启动 JobManager;
  3. ApplicationMaster 向 ResouceManager 申请资源启动 TaskManager;
  4. ResourceManager 分配 Container 资源后,由 ApplicationMaster 通知资源所在节点的 NodeManager 启动 TaskManager;
  5. TaskManager 加载 Flink 的 Jar包和配置构建环境并启动 TaskManager;
  6. TaskManager 启动后向 JobManager 发送心跳包,并等待 JobManager 向其分配任务;
  • 24
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值