# Flink运行时的架构组件有哪些?

Flink 运行时采用典型的 Master-Worker(主从架构),核心组件主要分为两大角色:JobManager(Master)TaskManager(Worker),同时依赖一个客户端(Client)来提交作业。

具体组件及其职责如下:

# JobManager(作业管理器)集群的“大脑”

它是整个任务调度的中心,负责协调和 checkpoint 协调。一个集群通常有一个活跃的 JobManager(HA 模式下会有备用节点)。

  • Dispatcher(分发器):接收客户端提交的作业,为每个作业启动一个新的 JobMaster。同时提供 RESTful API 来查询监控信息。

  • JobMaster(作业主控):负责管理单个具体的 JobGraph(作业图)。它会向 ResourceManager 申请资源(Task Slot),并将 JobGraph 转换为 ExecutionGraph,然后调度 Task 到 TaskManager 执行。

  • ResourceManager(资源管理器):负责管理 TaskManager 的插槽(Slot)。它负责启动新的 TaskManager 或空闲时回收资源。Flink 有多种实现(如 Standalone、YARN、K8s)。

# TaskManager(任务管理器)数据处理的“工人”

负责执行具体的计算任务。每个 TaskManager 是一个独立的 JVM 进程。

  • Task Slot(任务插槽):TaskManager 内部划分为多个 Slot,这是资源调度的最小单位。一个 Slot 可以运行一个或多个 Task(可能共享)。

  • Network & Memory Manager:管理网络传输和内存分配,确保数据在算子之间高效流动。

# Client(客户端)

  • 不是运行时的一部分,而是用于提交作业。

  • 负责解析用户代码,生成 StreamGraph 和 JobGraph 并提交给 JobManager。

  • 提交完成后可以断开(分离模式),也可以保持连接获取进度(打印结果)。

# 核心交互流程(快速理解)

  1. Client 编译代码,生成 JobGraph 发给 Dispatcher。

  2. Dispatcher 为作业启动 JobMaster。

  3. JobMaster 向 ResourceManager 请求可用 Slot。

  4. ResourceManager 通知空闲的 TaskManager 申请到 Slot。

  5. JobMaster 将 Task 部署到这些 Slot 上执行。

  6. TaskManager 之间通过网络 Shuffle 交换数据。

# 补充说明:在不同的部署模式下,角色略有差异

  • Standalone 模式:需要预先启动所有 JobManager 和 TaskManager 进程。
  • YARN/K8s 模式:ResourceManager 会动态申请容器来启动 TaskManager,作业结束后自动释放资源
Last Updated: 5/13/2026, 12:44:46 PM