Flink 运行时架构

admin2024-07-05  5

Flink 运行时的组件

Flink 运行时架构,在这里插入图片描述,第1张

  • 作业管理器(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 任务提交流程

Flink 运行时架构,在这里插入图片描述,第2张

  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 上为例:
Flink 运行时架构,在这里插入图片描述,第3张

  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 向其分配任务;
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!