Apache Flink 核心概念与部署解析

一、运行架构

Apache Flink 采用主从架构,包含 JobManager、TaskManager 和 Client 三大核心组件:

  • JobManager: 负责作业调度与协调,类似于 Storm 中的 Nimbus。
  • TaskManager: 执行 JobManager 分配的任务,并将心跳和统计信息汇报给 JobManager。
  • Client: 提交作业的客户端,可运行于任意机器,将作业提交给 JobManager 进行调度。

二、作业执行流程

  1. 客户端将代码转换为可提交的 JobGraph。
  2. 启动 ApplicationMaster (AM) 并申请资源。
  3. 客户端将 JobGraph 提交给 Dispatcher。
  4. Dispatcher 启动新的 JobManager 线程。
  5. JobManager 向 Flink ResourceManager 申请 slot 资源执行任务。
  6. ResourceManager 向 YARN 申请资源启动 TaskManager。
  7. YARN 分配 Container 启动 TaskManager。
  8. Flink ResourceManager 向 TaskManager 申请 slot 资源启动 Task。
  9. TaskManager 将待分配的 slot 提供给 JobManager。
  10. JobManager 提交 Task,TaskManager 启动新线程执行任务。

三、部署模式

Flink 支持多种部署模式,包括 Standalone、Yarn、Mesos、Kubernetes 等,其中 Yarn 模式最为常用。

四、Flink on Yarn

Flink on Yarn 支持两种部署类型:

  • Session 模式: 共享 Dispatcher 和 Resource Manager 资源,需先启动集群再提交作业。
  • Resource Manager 模式: 按需申请资源,资源不足时作业无法提交,直至 YARN 释放资源。