Flink Runtime 架构
Flink Runtime 组成
Flink Runtime 整体架构包含了三部分 Client、JobManager、TaskManager
Flink 运行时由两种类型的进程组成:一个 JobManager 和一个或者多个 TaskManager。
Client 不是运行时和程序执行的一部分,而是用于准备 JobGraph 并将其发送给 JobManager。之后,客户端可以断开连接(分离模式),或保持连接来接收进程报告(附加模式)。客户端可以作为触发执行 Java/Scala 程序的一部分运行,也可以在命令行进程./bin/flink run ...中运行。
可以通过多种方式启动 JobManager 和 TaskManager:直接在机器上作为standalone 集群启动、在容器中启动、或者通过YARN或Mesos等资源框架管理并启动。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 中可以执行多个算子
评论