一个从用户代码到分布式执行的完整过程,主要分为以下核心阶段(附关键流程图解):就是Flink的工作流程
程序提交、图转换、资源分配任务执行四个阶段,具体流程如下:

一、程序提交阶段

‌代码解析
用户通过DataStream API或Table API编写程序,调用env.execute()触发执行。客户端生成初始逻辑图StreamGraph,包含所有算子节点和数据流边
‌图优化转换‌

‌StreamGraph‌:直接映射用户代码逻辑,是最接近用户层的初始图结构。
‌JobGraph‌:进行算子链(OperatorChain)合并优化,将多个算子合并为同一线程执行的任务,减少网络开销。
‌ExecutionGraph‌:加入并行度概念,是实际调度执行的数据结构,由JobMaster管理。

‌StreamGraph → JobGraph‌:合并算子链(Operator Chain),将可并行且无shuffle的算子合并为Task

// 示例:map和filter会被合并为单个Task
dataStream.map(...).filter(...).keyBy(...).sum(...)

‌JobGraph → ExecutionGraph‌:根据并行度展开为可调度的并行子任务

二、集群调度阶段

‌资源申请‌
JobManager向资源管理器(YARN/K8s)申请Slot资源
Standalone模式直接使用预分配TaskManager资源
‌任务部署‌
每个Task部署到对应Slot执行
网络通信模式
‌Forward‌:一对一传输(如map→filter)
‌Hash/Partition‌:按Key重分布(如keyBy)

三、运行时执行阶段

‌数据流处理‌
TaskManager启动线程执行任务,采用事件驱动模型。
数据到达时触发计算,通过时间窗口和水位线机制处理乱序数据,结果可通过Sink输出或继续流转。
执行完成后,单作业模式会释放集群资源,会话模式则保留资源供其他作业使用。
关键机制
‌Watermark‌:推动事件时间进展
‌Checkpoint‌:周期性状态快照
‌容错恢复‌
故障时从最近Checkpoint恢复状态
端到端精确一次需Sink拥护两阶段提交

四、部署模式差异

模式资源隔离性适用场景工作流特性
会话模式开发测试多作业共享常驻集群
单作业模式生产环境核心作业作业级集群生命周期管理
应用模式复杂应用main()在集群执行,降低客户端负载

五、完整流程图解

Flink作业执行流程

以下为Apache Flink作业从用户代码到最终执行的完整流程示意图及说明:

posted on 2025-10-02 15:16  ycfenxi  阅读(14)  评论(0)    收藏  举报