写点什么

Flink Runtime 架构

用户头像
布兰特
关注
发布于: 19 小时前
Flink Runtime架构

Flink Runtime 组成

Flink Runtime 整体架构包含了三部分 Client、JobManager、TaskManager


Flink 运行时由两种类型的进程组成:一个 JobManager 和一个或者多个 TaskManager。


Client 不是运行时和程序执行的一部分,而是用于准备 JobGraph 并将其发送给 JobManager。之后,客户端可以断开连接(分离模式),或保持连接来接收进程报告(附加模式)。客户端可以作为触发执行 Java/Scala 程序的一部分运行,也可以在命令行进程./bin/flink run ...中运行。


可以通过多种方式启动 JobManager 和 TaskManager:直接在机器上作为standalone 集群启动、在容器中启动、或者通过YARNMesos等资源框架管理并启动。TaskManager 连接到 JobManagers,宣布自己可用,并被分配工作。


Flink 作业流程图


Runtime 整体架构图



角色释义

Client

Client 端,对用户程序代码进行编译和优化,生成 Dataflow Graph,也就是 Stream Graph 对象,然后通过 RPC 通讯的方式(Actor System)和 JobManager 进行通信,将生成的 JobGraph 提交给 JobManager。


JobManager

JobManager 具有许多与协调 Flink 应用程序的分布式执行有关的职责:它决定何时调度下一个 task(或一组 task)、对完成的 task 或执行失败做出反应、协调 checkpoint、并且协调从失败中恢复等等。这个进程由三个不同的组件组成:

  • ResourceManager 负责 Flink 集群中的资源提供、回收、分配、管理 task slots,这是 Flink 集群中资源调度的单位。Flink 为不同的环境和资源提供者(例如 YARN、Mesos、Kubernetes 和 standalone 部署)实现了对应的 ResourceManager。ResourceManager 中有一个重要的组件 SlotManager,对整个集群 Slot 资源进行管理。在 standalone 设置中,ResourceManager 只能分配可用 TaskManager 的 slots,而不能自行启动新的 TaskManager。


  • Dispatcher 提供了一个 REST 接口,用来提交 Flink 应用程序执行,并为每个提交的作业启动一个新的 JobMaster。它还运行 Flink WebUI 用来提供作业执行信息。


  • JobMaster 负责管理单个JobGraph的执行。Flink 集群中可以同时运行多个作业,每个作业都有自己的 JobMaster。


始终至少有一个 JobManager。高可用(HA)设置中可能有多个 JobManager,其中一个始终是 leader,其他的则是 standby。


综上,JobManager 是在 Job 层面上来进行管理,同样,JobManager 也是通过 Actor System 远程通信的方式和 TaskManager 来进行交互

TaskManagers 

TaskManager(也称为 worker)执行作业流的 task,并且缓存和交换数据流。必须始终至少有一个 TaskManager。在 TaskManager 中资源调度的最小单位是 task slot。TaskManager 中 task slot 的数量表示并发处理 task 的数量。


所以 Flink 计算框架,是一个多线程计算模型。请注意一个 task slot 中可以执行多个算子

用户头像

布兰特

关注

大数据研发工程师 2019.05.10 加入

while true{ 🍴😪💻 }

评论

发布
暂无评论
Flink Runtime架构