当前位置: 首页 > article >正文

Flink 作业提交流程

Apache Flink 的 作业提交流程(Job Submission Process) 是指从用户编写完 Flink 应用程序,到最终在 Flink 集群上运行并执行任务的整个过程。它涉及多个组件之间的交互,包括客户端、JobManager、TaskManager 和 ResourceManager。


🧩 一、Flink 作业提交整体流程图解

[Client] → 提交 JobGraph↓
[JobManager / Dispatcher] → 调度与资源申请↓
[ResourceManager] → 分配 TaskManager Slot↓
[TaskManager] → 启动 Task 并执行 Subtask↓
[JobManager] → 协调任务状态、检查点等

📌 二、Flink 作业提交详细步骤说明

步骤描述
1. 用户编写代码使用 DataStream API 或 SQL 编写 Flink 作业
2. 构建 StreamGraph客户端将逻辑流转换为 StreamGraph(DAG)
3. 转换为 JobGraph将 StreamGraph 转换为 JobGraph,包含算子链、并行度等信息
4. 提交 JobGraph 到集群通过 CLI、REST API 或 Web UI 提交到 Flink 集群
5. JobManager 接收并初始化创建 ExecutionGraph,管理任务调度
6. ResourceManager 分配资源根据资源需求向 TaskManager 申请 Slot
7. TaskManager 启动任务在分配的 Slot 上启动 Task,并开始执行 Subtask
8. 执行计算任务持续处理数据流,进行状态更新和窗口计算
9. 状态管理与容错Checkpoint/Savepoint 机制保障状态一致性
10. 结果输出或写入外部系统输出到 Sink(如 Kafka、HDFS、MySQL 等)

⚙️ 三、各组件职责详解

组件职责
Client提交作业、打包 JAR、生成 JobGraph
JobManager负责任务调度、协调 Checkpoint、维护 ExecutionGraph
Dispatcher接收作业提交请求,负责创建 JobManager
ResourceManager管理 TaskManager 的 Slot 资源,分配资源给 JobManager
TaskManager执行具体的 Task,每个 Task 包含一个或多个 Subtask
ExecutionGraphJobManager 内部的执行图,用于调度 Subtask
Checkpoint Coordinator协调 Checkpoint,确保状态一致性

📦 四、作业提交方式汇总

方式描述命令示例
CLI 提交最常用方式,适合本地测试和生产部署flink run -c com.example.MyJob ./myjob.jar
Web UI 提交图形化界面上传 JAR 文件并运行http://localhost:8081
REST API 提交适用于自动化部署、平台集成POST /jars/{jarid}/run
YARN Session 模式多个作业共享一个 YARN ApplicationMasteryarn session -n 2 -tm 2048
Application 模式每个作业单独启动一个 ApplicationMasterflink run-application -t yarn-application ./myjob.jar
Kubernetes Native 模式在 Kubernetes 上直接部署 Flink 作业使用 Operator 或 Native 部署模式

🧠 五、提交流程详解(以 Standalone 或 YARN 模式为例)

✅ 1. 客户端(Client)

  • 编译并打包 Flink 作业为 JAR 文件
  • 使用 flink run 命令提交作业
  • 生成 JobGraph 并发送至 JobManager
flink run -m yarn-cluster -p 4 -c com.example.WordCount ./wordcount.jar

✅ 2. JobManager(也称作 Dispatcher + JobMaster)

  • 接收 Client 提交的 JobGraph
  • 创建 ExecutionGraph,描述任务执行计划
  • 请求 ResourceManager 分配资源

✅ 3. ResourceManager

  • 根据 JobManager 请求,向 TaskManager 申请 Slot
  • 协调资源分配,保证资源公平使用

✅ 4. TaskManager

  • 收到 Slot 分配通知后,准备执行环境
  • 加载 JAR 文件,启动 Subtask
  • 向 JobManager 报告执行状态

✅ 5. ExecutionGraph 执行

  • JobManager 监控所有 Task 的执行情况
  • 触发 Checkpoint,维护状态一致性
  • 处理失败重试、反压监控等

📊 六、JobGraph vs StreamGraph vs ExecutionGraph 对比

名称描述特点
StreamGraph用户编写的 DAG 流程包含 operator chain 优化后的逻辑图
JobGraph提交到集群的任务图包含 operator chains、slot sharing group 等元数据
ExecutionGraphJobManager 内部运行图包含实际执行的 Subtask 及其依赖关系

🔁 七、状态恢复与 Checkpoint 流程

  1. JobManager 定期触发 Checkpoint
  2. TaskManager 将状态快照写入配置的 Checkpoint 存储路径(如 HDFS)
  3. JobManager 收集所有 Task 的 Checkpoint 成功信号
  4. 如果发生故障,从最近成功的 Checkpoint 恢复状态

🧪 八、完整提交命令示例(YARN 模式)

# 启动 YARN Session
flink run-application -t yarn-application \-Djobmanager.memory.process.size=1024mb \-Dtaskmanager.memory.process.size=2048mb \-Dparallelism.default=4 \./my-flink-job.jar
# 提交到已有的 Session 集群
flink run -m yarn-cluster -p 4 -c com.example.MyJob ./myjob.jar

🧩 九、提交流程中的关键概念

概念描述
Operator Chaining算子链合并,减少网络传输开销
Slot Sharing Group同一组内的算子可共享同一个 Slot
Parallelism设置每个算子的并发数
Checkpoints用于状态一致性和容错机制
Savepoints手动触发的状态快照,用于升级、迁移等
Backpressure当下游处理速度慢于上游时产生的压力反馈机制

✅ 十、总结:Flink 作业提交流程的核心阶段

阶段描述
1. 客户端构建将用户代码转换为 StreamGraph → JobGraph
2. 提交作业Client 提交到 JobManager
3. 资源调度ResourceManager 分配 TaskManager Slot
4. 任务执行TaskManager 启动 Subtask 并执行逻辑
5. 状态管理Checkpointing 保障状态一致性
6. 故障恢复重启失败任务并从 Checkpoint 恢复

📘 十一、扩展学习方向

如果你希望我为你演示以下内容,请继续提问:

  • Flink on YARN 提交流程详解
  • Flink on Kubernetes 提交原理
  • 自定义 Checkpoint 存储路径
  • Savepoint 的使用与恢复
  • ExecutionGraph 的结构与作用
  • 如何查看 Web UI 中的 ExecutionGraph
  • 作业失败时的恢复机制详解

📌 一句话总结:

Flink 作业提交流程是一个多组件协作的过程,核心是 JobGraph 的构建与 ExecutionGraph 的执行,结合 Checkpoint 实现高可用与状态一致性。

相关文章:

Flink 作业提交流程

Apache Flink 的 作业提交流程(Job Submission Process) 是指从用户编写完 Flink 应用程序,到最终在 Flink 集群上运行并执行任务的整个过程。它涉及多个组件之间的交互,包括客户端、JobManager、TaskManager 和 ResourceManager。…...

拓展运算符

拓展运算符(Spread Operator)是ES6中引入的新特性,以下是关于它的一些知识点总结: 语法 拓展运算符的语法是三个点(...),它可以将数组或对象展开成多个元素或属性。 数组中的应用 • 数组展…...

Seata源码—6.Seata AT模式的数据源代理一

大纲 1.Seata的Resource资源接口源码 2.Seata数据源连接池代理的实现源码 3.Client向Server发起注册RM的源码 4.Client向Server注册RM时的交互源码 5.数据源连接代理与SQL句柄代理的初始化源码 6.Seata基于SQL句柄代理执行SQL的源码 7.执行SQL语句前取消自动提交事务的源…...

计算机科技笔记: 容错计算机设计05 n模冗余系统 TMR 三模冗余系统

NMR(N-Modular Redundancy,N 模冗余)是一种通用的容错设计架构,通过引入 N 个冗余模块(N ≥ 3 且为奇数),并采用多数投票机制,来提升系统的容错能力与可靠性。单个模块如果可靠性小于…...

Spring Boot 与 RabbitMQ 的深度集成实践(一)

引言 ** 在当今的分布式系统架构中,随着业务复杂度的不断提升以及系统规模的持续扩张,如何实现系统组件之间高效、可靠的通信成为了关键问题。消息队列作为一种重要的中间件技术,应运而生并发挥着举足轻重的作用。 消息队列的核心价值在于其…...

黑马程序员2024新版C++笔记 第2章 语句

1.if逻辑判断语句 语法主体: if(要执行的判断,结果是bool型){判断结果是true会执行的代码; } 2.AI大模型辅助编程 在Clion中搜索并安装对应插件: 右上角齿轮点击后找到插件(TRONGYI LINGMA和IFLYCODE)安装后重启ide即可。 重启后会有通义登…...

HTML5中的Microdata与历史记录管理详解

HTML5中的Microdata与历史记录管理解析 一、Microdata结构化数据 核心属性 itemscope 声明数据范围itemtype 指定数据词汇表&#xff08;如http://schema.org/Product&#xff09;itemprop 定义数据属性 <div itemscope itemtype"http://schema.org/Book">…...

上位机知识篇---涂鸦智能云平台

文章目录 前言 前言 本文简单介绍了涂鸦智能云平台。...

面试中的线程题

原文链接&#xff1a;线程题大全 Java 并发库同步辅助类 CountDownLatch 工作机制&#xff1a;初始化一个计数器&#xff0c;此计数器的值表示需要等待的事件数量。 提供了两个主要方法&#xff1a; await()&#xff1a;当一个线程调用此方法时&#xff0c;它将阻塞&#…...

济南国网数字化培训班学习笔记-第三组-2-电力通信光缆网认知

电力通信光缆网认知 光缆网架构现状 基础底座 电路系统是高度复杂&#xff0c;实时性、安全性、可靠性要求极高的巨系统&#xff0c;必须建设专用通信网 相伴相生 电力系统是由发电、输电、变电、配电、用电等一次设施&#xff0c;及保障其正常运行的保护、自动化、通信等…...

前端动画库 Anime.js 的V4 版本,兼容 Vue、React

前端动画库 Anime.js 更新了 V4 版本&#xff0c;并对其官网进行了全面更新&#xff0c;增加了许多令人惊艳的效果&#xff0c;尤其是时间轴动画效果&#xff0c;让开发者可以更精确地控制动画节奏。 这一版本的发布不仅带来了全新的模块化 API 和显著的性能提升&#xff0c;还…...

用 PyTorch 从零实现简易GPT(Transformer 模型)

用 PyTorch 从零实现简易GPT&#xff08;Transformer 模型&#xff09; 本文将结合示例代码&#xff0c;通俗易懂地拆解大模型&#xff08;Transformer&#xff09;从数据预处理到推理预测的核心组件与流程&#xff0c;并通过 Mermaid 流程图直观展示整体架构。文章结构分为四…...

前端JSON序列化中的隐形杀手:精度丢失全解析与实战解决方案

当你在电商平台看到订单ID从 “1298035313029456899” 变成 “1298035313029456900”&#xff0c;或者在金融系统中发现账户余额 100.01 元变成了 100.00999999999999 元时&#xff0c;这很可能遭遇了前端开发中最隐蔽的陷阱之一 —— JSON序列化精度丢失。本文将深入解析这一问…...

【通用大模型】Serper API 详解:搜索引擎数据获取的核心工具

Serper API 详解&#xff1a;搜索引擎数据获取的核心工具 一、Serper API 的定义与核心功能二、技术架构与核心优势2.1 技术实现原理2.2 对比传统方案的突破性优势 三、典型应用场景与代码示例3.1 SEO 监控系统3.2 竞品广告分析 四、使用成本与配额策略五、开发者注意事项六、替…...

Spring3+Vue3项目中的知识点——JWT

全称&#xff1a;JOSN Web Token 定义了一种简洁的、自包含的格式&#xff0c;用于通信双方以json数据格式的安全传输信息 组成&#xff1a; 第一部分&#xff1a;Header&#xff08;头&#xff09;&#xff0c;记录令牌类型、签名算法等。 第二部分&#xff1a;Payload&am…...

python3GUI--智慧交通分析平台:By:PyQt5+YOLOv8(详细介绍)

文章目录 一&#xff0e;前言二&#xff0e;效果预览1.目标识别与检测2.可视化展示1.车流量统计2. 目标类别占比3. 拥堵情况展示4.目标数量可视化 3.控制台4.核心内容区1.目标检测参数2.帧转QPixmap3.数据管理 5.项目结构 三&#xff0e;总结 平台规定gif最大5M&#xff0c;所以…...

Linux任务管理与守护进程

一、任务管理 &#xff08;一&#xff09;进程组、作业、会话概念 &#xff08;1&#xff09;进程组概念&#xff1a;进程组是由一个或多个进程组成的集合&#xff0c;这些进程在某些方面具有关联性。在操作系统中&#xff0c;进程组是用于对进程进行分组管理的一种机制。每个…...

C#里与嵌入式系统W5500网络通讯(2)

在嵌入式代码里,需要从嵌入式的MCU访问W5500芯片。 这个是通过SPI通讯来实现的,所以要先连接SPI的硬件通讯线路。 接着下来,就是怎么样访问这个芯片了。 要访问这个芯片,需要通过SPI来发送数据,而发送数据又要有一定的约定格式, 于是芯片厂商就定义下面的通讯格式: …...

EMQX开源版安装指南:Linux/Windows全攻略

EMQX开源版安装教程-linux/windows 因最近自己需要使用MQTT&#xff0c;需要搭建一个MQTT服务器&#xff0c;所以想到了很久以前用到的EMQX。但是当时的EMQX使用的是开源版的&#xff0c;在官网可以直接下载。而现在再次打开官网时发现怎么也找不大开源版本了&#xff0c;所以…...

【计算机视觉】OpenCV实战项目:GraspPicture 项目深度解析:基于图像分割的抓取点检测系统

GraspPicture 项目深度解析&#xff1a;基于图像分割的抓取点检测系统 一、项目概述项目特点 二、项目运行方式与执行步骤&#xff08;一&#xff09;环境准备&#xff08;二&#xff09;项目结构&#xff08;三&#xff09;执行步骤 三、重要逻辑代码解析&#xff08;一&#…...

MySQL 数据库备份与还原

作者&#xff1a;IvanCodes 日期&#xff1a;2025年5月18日 专栏&#xff1a;MySQL教程 思维导图 备份 (Backup) 与 冗余 (Redundancy) 的核心区别: &#x1f3af; 备份是指创建数据的副本并将其存储在不同位置或介质&#xff0c;主要目的是在发生数据丢失、损坏或逻辑错误时进…...

Kubernetes控制平面组件:Kubelet详解(四):gRPC 与 CRI gRPC实现

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…...

javax.servlet.Filter 介绍-笔记

1.javax.servlet.Filter 简介 javax.servlet.Filter 是 Java Servlet API 中的一个核心接口&#xff0c;用于在请求到达目标资源&#xff08;如 Servlet 或 JSP&#xff09;之前或响应返回给客户端之前执行预处理或后处理操作。它常用于实现与业务逻辑无关的通用功能&#xff…...

从40秒到11毫秒:TiDB环境下一次SQL深潜优化实战

作者&#xff1a; meathill 原文来源&#xff1a; https://tidb.net/blog/edb6061b 在数据库应用中&#xff0c;慢SQL是常见的性能瓶颈。本文将详细记录一次针对TiDB Cloud v7.5.2环境中复杂评论查询的SQL优化过程&#xff0c;如何通过分析执行计划、添加索引、改写SQL&…...

Win 11开始菜单图标变成白色怎么办?

在使用windows 11的过程中&#xff0c;有时候开始菜单的某些程序图标变成白色的文件形式&#xff0c;但是程序可以正常打开&#xff0c;这个如何解决呢&#xff1f; 这通常是由于快捷方式出了问题&#xff0c;下面跟着操作步骤来解决吧。 1、右键有问题的软件&#xff0c;打开…...

入门OpenTelemetry——应用自动埋点

埋点 什么是埋点 埋点&#xff0c;本质就是在你的应用程序里&#xff0c;在重要位置插入采集代码&#xff0c;比如&#xff1a; 收集请求开始和结束的时间收集数据库查询时间收集函数调用链路信息收集异常信息 这些埋点数据&#xff08;Trace、Metrics、Logs&#xff09;被…...

C语言链表的操作

初学 初学C语言时&#xff0c;对于链表节点的定义一般是这样的&#xff1a; typedef struct node {int data;struct node *next; } Node; 向链表中添加节点&#xff1a; void addNode(Node **head, int data) {Node *newNode (Node*)malloc(sizeof(Node));newNode->dat…...

芯片生态链深度解析(二):基础设备篇——人类精密制造的“巅峰对决”

【开篇&#xff1a;设备——芯片工业的“剑与盾”】 当ASML的EUV光刻机以每秒5万次激光脉冲在硅片上雕刻出0.13nm精度的电路&#xff08;相当于在月球表面精准定位一枚二维码&#xff09;&#xff0c;当国产28nm光刻机在华虹产线实现“从0到1”的突破&#xff0c;这场精密制造…...

C语言指针深入详解(二):const修饰指针、野指针、assert断言、指针的使用和传址调用

目录 一、const修饰指针 &#xff08;一&#xff09;const修饰变量 &#xff08;二&#xff09;const 修饰指针变量 二、野指针 &#xff08;一&#xff09;野指针成因 1、指针未初始化 2、指针越界访问 3、指针指向的空间释放 &#xff08;二&#xff09;如何规避野指…...

【unity游戏开发——编辑器扩展】使用EditorGUI的EditorGUILayout绘制工具类在自定义编辑器窗口绘制各种UI控件

注意&#xff1a;考虑到编辑器扩展的内容比较多&#xff0c;我将编辑器扩展的内容分开&#xff0c;并全部整合放在【unity游戏开发——编辑器扩展】专栏里&#xff0c;感兴趣的小伙伴可以前往逐一查看学习。 文章目录 前言常用的EditorGUILayout控件专栏推荐完结 前言 EditorG…...