ResourceManager 与 JobManager与 TaskManager 三者的协作关系
目录
1.ResourceManager (资源管理器)
2. JobManager (作业管理器)
3. TaskManager (任务管理器)
协作关系
1. 资源请求与分配
2. 任务调度
3. 任务执行
4. 状态管理和容错
类比:餐厅运营
1. ResourceManager (资源管理器)
2. JobManager (作业管理器)
3. TaskManager (任务管理器)
协作关系
1. 资源请求与分配
2. 任务调度
3. 任务执行
4. 状态管理和容错
1.ResourceManager (资源管理器)
- 主要职责:
- 管理集群中的资源。
- 接收来自 JobManager 的资源请求。
- 分配 TaskManager 资源给 JobManager。
- 回收不再需要的 TaskManager 资源。
2. JobManager (作业管理器)
- 主要职责:
- 协调和管理整个应用程序的执行。
- 根据 JobGraph 调度 Task 到 TaskManager 上执行。
- 触发和协调检查点,实现容错机制。
- 在发生故障时重新调度任务。
- 管理 TaskManager 的资源使用情况。
3. TaskManager (任务管理器)
- 主要职责:
- 执行具体的计算任务。
- 与其他 TaskManager 之间进行数据交换。
- 管理内存中的缓存和缓冲区,优化数据传输。
- 定期向 JobManager 报告心跳,表示其状态正常。
- 在本地存储任务的状态,并在检查点时将状态持久化到外部存储系统中。
协作关系
1. 资源请求与分配
- JobManager 向 ResourceManager 请求资源:
- 当一个 Flink 作业提交后,JobManager 会根据作业的需求向 ResourceManager 发送资源请求。这个请求通常包括需要的 TaskManager 数量及其资源需求(如 CPU 核心数、内存大小等)。
- ResourceManager 分配 TaskManager 资源:
- ResourceManager 收到资源请求后,会根据当前集群的资源情况,为 JobManager 分配合适的 TaskManager 资源。ResourceManager 会启动新的 TaskManager 或者从现有的 TaskManager 池中分配资源。
2. 任务调度
- JobManager 调度 Task 到 TaskManager:
- 一旦 JobManager 获取到足够的 TaskManager 资源,它会根据 JobGraph 将具体的 Task 调度到这些 TaskManager 上执行。JobManager 会决定每个 Task 应该在哪个 TaskManager 上运行,并优化数据传输和负载均衡。
3. 任务执行
- TaskManager 执行 Task:
- TaskManager 接收到由 JobManager 分配的任务后,开始执行这些任务。TaskManager 会在本地执行计算,并与其他 TaskManager 交换数据。
- TaskManager 会定期向 JobManager 报告心跳和任务状态,确保 JobManager 可以监控整个作业的执行情况。
4. 状态管理和容错
-
检查点触发与协调:
- JobManager 会周期性地触发检查点操作,通知所有 TaskManager 创建状态快照。TaskManager 会将状态数据写入外部存储系统(如 HDFS、S3 等)。
- 检查点完成后,JobManager 会记录检查点信息,以便在故障恢复时使用。
-
故障恢复:
- 如果某个 TaskManager 或 Task 失败,JobManager 会检测到故障,并重新调度失败的任务到其他可用的 TaskManager 上继续执行。
- 使用最新的检查点状态进行恢复,确保数据的一致性和准确性。
我们可以将 Flink 的架构类比为一家餐厅的运营,这样可能会更直观一些。
类比:餐厅运营
1. ResourceManager (资源管理器)
- 类比:餐厅经理
- 职责:
- 管理整个餐厅的资源(如厨师、服务员、食材等)。
- 接收来自厨房主管(JobManager)的资源请求(如需要多少厨师和服务员)。
- 分配资源给厨房主管(如安排厨师和服务员)。
- 回收不再需要的资源(如某个厨师或服务员完成了工作,可以重新分配到其他任务)。
2. JobManager (作业管理器)
- 类比:厨房主管
- 职责:
- 协调和管理整个厨房的工作流程。
- 根据订单(JobGraph)调度具体的烹饪任务(Task)给厨师(TaskManager)。
- 触发和协调检查点(如定期检查食材的新鲜度)。
- 在发生故障时重新调度任务(如某个厨师生病了,重新安排其他厨师接手)。
- 管理厨师和服务员的资源使用情况。
3. TaskManager (任务管理器)
- 类比:厨师和服务员
- 职责:
- 具体执行烹饪任务(如炒菜、切菜等)。
- 与其他厨师和服务员之间进行协作(如传递食材、上菜等)。
- 管理自己的工具和食材(如刀具、调料等)。
- 定期向厨房主管报告工作状态(如完成的任务数量、剩余食材等)。
- 在本地存储任务的状态(如正在烹饪的菜品信息),并在检查点时将状态记录下来(如记录食材的使用情况)。
协作关系
1. 资源请求与分配
-
厨房主管(JobManager)向餐厅经理(ResourceManager)请求资源:
- 厨房主管根据订单(JobGraph)向餐厅经理请求所需的厨师和服务员数量。
- 例如:“我们需要5个厨师和3个服务员来处理今天的订单。”
-
餐厅经理(ResourceManager)分配资源:
- 餐厅经理根据当前餐厅的资源情况,为厨房主管分配所需的厨师和服务员。
- 例如:“好的,我给你分配5个厨师和3个服务员。”
2. 任务调度
- 厨房主管(JobManager)调度任务给厨师(TaskManager):
- 一旦厨房主管获取到足够的厨师和服务员,他会根据订单(JobGraph)将具体的烹饪任务(Task)分配给这些厨师。
- 例如:“张师傅负责炒菜,李师傅负责切菜,王服务员负责上菜。”
3. 任务执行
- 厨师(TaskManager)执行任务:
- 厨师接收到任务后,开始具体执行烹饪任务。
- 例如:张师傅开始炒菜,李师傅开始切菜,王服务员准备上菜。
- 厨师和服务员会定期向厨房主管报告工作状态,确保厨房主管可以监控整个厨房的运作情况。
4. 状态管理和容错
-
检查点触发与协调:
- 厨房主管会周期性地触发检查点操作,通知所有厨师和服务员记录当前的状态(如正在烹饪的菜品信息)。
- 例如:“现在是下午3点,大家都记录一下自己手头的工作进度。”
-
故障恢复:
- 如果某个厨师或服务员突然不能继续工作(如生病或受伤),厨房主管会检测到这个问题,并重新调度任务给其他可用的厨师或服务员。
- 例如:“张师傅生病了,王师傅你来接替他继续炒菜。”