# Flink架构是怎么样的?
Flink 的架构可以从运行时物理架构和分层技术架构两个视角来理解,它们共同构成了 Flink 处理无界/有界数据的核心能力。
# 运行时物理架构(主从模式)
这是 Flink 执行作业的进程级结构:
Client → JobManager → TaskManager
1
- JobManager(Master):集群的管理节点,负责任务调度、Checkpoint 协调、故障恢复。内部包含:
- Dispatcher:接收作业、启动 JobMaster、提供 REST API。
- JobMaster:管理单个作业的生命周期,将 JobGraph 转为 ExecutionGraph,申请资源。
- ResourceManager:管理 TaskManager 的 Slot(空闲/分配)。
- TaskManager(Worker):实际执行算子的 JVM 进程。每个 TaskManager 包含多个 Task Slot(内存等资源的隔离单元),一个 Slot 可以运行一个或多个并行子任务。
- Client:提交作业(生成 StreamGraph/JobGraph),不参与执行。
TIP
部署差异:Standalone 模式手动启动所有进程;YARN/K8s 模式动态申请容器,ResourceManager 对接外部资源调度器。
# 分层技术架构(从应用到执行)
Flink 设计为分层架构,每层可独立扩展:
SQL / Table API ← 最高层(关系型抽象)
↑
DataStream / DataSet API ← 核心 API(流/批统一)
↑
Runtime 层(JobManager + TaskManager)← 分布式执行引擎
↑
物理部署层(Local, Standalone, YARN, K8s, Cloud)
1
2
3
4
5
6
7
2
3
4
5
6
7
各层职责
- 部署层:支持各种环境,Flink 应用以标准 JVM 进程运行。
- Runtime 层:提供数据流执行、状态管理、容错(Checkpoint/Savepoint)、背压(Backpressure)等核心能力。
- API 层:
DataStream API:流处理(事件时间、窗口、状态)。DataSet API(批处理,已逐渐被 Table API + Batch 模式替代)。ProcessFunction等底层 API。
- Table/SQL 层:基于 Apache Calcite 优化,自动生成 DataStream 程序。
# 逻辑数据流架构(作业内部)
Flink 作业表现为一个 有向无环图(DAG):
Source → Transformations → Sink
1
- Source:数据接入(Kafka、Socket、文件…)。
- Transformations:map、filter、keyBy、window、join 等。
- Sink:结果输出(DB、HDFS、Kafka…)。
在运行时,这个逻辑图被转换为:
- StreamGraph(Client 生成)→ JobGraph(优化后)→ ExecutionGraph(JobMaster 并行化)→ 物理执行图(TaskManager 上的 Task)