Flink从入门到实战三[架构]-1_Flink运行时架构

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

Flink运行时架构图

我们先来来接Flink中的重要组件及其作用。

JobManager(Master)

它决定何时调度下一个 task(或一组 task)、对完成的 task 或执行失败做出反应、协调 checkpoint、并且协调从失败中恢复等等。
这个进程由三个不同的组件组成:

ResourceManager
ResourceManager 负责 Flink 集群中的资源提供、回收、分配 – 它管理 task slots,这是 Flink 集群中资源调度的单位(请参考TaskManagers)。Flink 为不同的环境和资源提供者(例如 YARN、Kubernetes 和 standalone 部署)实现了对应的 ResourceManager。在 standalone 设置中,ResourceManager 只能分配可用 TaskManager 的 slots,而不能自行启动新的 TaskManager。

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

JobMaster
JobMaster 负责管理单个JobGraph的执行。Flink 集群中可以同时运行多个作业,每个作业都有自己的 JobMaster。
始终至少有一个 JobManager。高可用(HA)设置中可能有多个 JobManager,其中一个始终是 leader,其他的则是 standby。

TaskManager(Worker)

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

总结一下各组件的作用:

Dispatcher
集群 Job 的调度分发
根据 JobGraph 启动JobManager(JobMaster)

ResourceManager
集群层面资源管理
适配不同的资源管理
核心组件:SlotManager

TaskManager
Slot 计算资源提供者

JobManager
负责管理一个具体的 Job
Scheduler
调度和执行该 Job 的所有 Task
发出 Slots 资源请求