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 实现高可用与状态一致性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/81519.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ctr查看镜像

# 拉取镜像到 k8s.io 命名空间 sudo nerdctl --namespace k8s.io pull nginx:1.23.4 # 验证镜像是否已下载 sudo nerdctl --namespace k8s.io images 下载镜像到k8s.io名称空间下 nerdctl --namespace k8s.io pull zookeeper:3.6.2 sudo ctr image pull --namespace k8s.io …

中科院自动化研究所通用空中任务无人机!基于大模型的通用任务执行与自主飞行

作者: Ji Zhao and Xiao Lin 单位:中科院自动化研究所 论文标题:General-Purpose Aerial Intelligent Agents Empowered by Large Language Models 论文链接:https://arxiv.org/pdf/2503.08302 主要贡献 硬件-软件协同设计框…

数据结构 -- 树形查找(三)红黑树

红黑树 为什么要发明红黑树 平衡二叉树AVL:插入/删除很容易破坏平衡性,需要频繁调整树的形态。如:插入操作导致不平衡,则需要先计算平衡因子,找到最小不平衡子树(时间开销大),在进行…

容器化-k8s-使用和部署

一、K8s 使用 1、基本概念 集群: 由 master 节点和多个 slaver 节点组成,是 K8s 的运行基础。节点: 可以是物理机或虚拟机,是 K8s 集群的工作单元,运行容器化应用。Pod: K8s 中最小的部署单元,一个 Pod 可以包含一个或多个紧密相关的容器,这些容器共享网络和存储资源。…

力扣-283-移动零

1.题目描述 2.题目链接 283. 移动零 - 力扣&#xff08;LeetCode&#xff09; 3.题目代码 class Solution {public void moveZeroes(int[] nums) {int dest-1;int cur0;while(cur<nums.length){if(nums[cur]0){cur;}else if(nums[cur]!0){swap(nums,cur,dest1);cur;dest…

前端开发笔记与实践

一、Vue 开发规范与响应式机制 1. 组件命名规范 自定义组件使用大驼峰命名法&#xff08;如 MyComponent&#xff09;&#xff0c;符合 Vue 官方推荐&#xff0c;便于与原生 HTML 元素区分。 2. Proxy vs defineProperty 特性Proxy&#xff08;Vue3&#xff09;Object.defi…

如何给PSCAD添加库文件

1、点击Options 2、选择蓝色的选项 3、查看Intel(R) Visual Fortran Compiler XE 的版本 4、打开原文件的Library 5、打开 6、点击这个文件的右键 7、然后选择第一项project setting 9、先把第8步中link里面原有的路径删除&#xff0c;再点browes[A1] &#xff0c;然后选择 [A…

milvus+flask山寨《从零构建向量数据库》第7章case2

继续流水账完这本书&#xff0c;这个案例是打造文字形式的个人知识库雏形。 create_context_db: # Milvus Setup Arguments COLLECTION_NAME text_content_search DIMENSION 2048 MILVUS_HOST "localhost" MILVUS_PORT "19530"# Inference Arguments…

【第一篇】 创建SpringBoot工程的四种方式

简介&#xff1a; 通过此篇博客你可以使用任何方式进行创建 SpringBoot 项目&#xff0c;并且在文章的最后附上答疑解惑一节&#xff0c;为你排除在使用过程中发生的常见问题。文章内容若存在错误或需改进的地方&#xff0c;欢迎大家指正&#xff01;若对操作有任何疑问欢迎留言…

GPT( Generative Pre-trained Transformer )模型:基于Transformer

GPT是由openAI开发的一款基于Transformer架构的预训练语言模型&#xff0c;拥有强大的生成能力和多任务处理能力&#xff0c;推动了自然语言处理&#xff08;NLP&#xff09;的快速发展。 一 GPT发展历程 1.1 GPT-1&#xff08;2018年&#xff09; 是首个基于Transformer架构…

网络检测工具InternetTest v8.9.1.2504 单文件版,支持一键查询IP/DNS、WIFI密码信息

—————【下 载 地 址】——————— 【​本章下载一】&#xff1a;https://drive.uc.cn/s/295e068b79314 【​本章下载二】&#xff1a;https://pan.xunlei.com/s/VOQDXguH0DYPxrql5y2zlkhTA1?pwdg2nx# 【百款黑科技】&#xff1a;https://ucnygalh6wle.feishu.cn/wiki/…

CSS- 4.1 浮动(Float)

本系列可作为前端学习系列的笔记&#xff0c;代码的运行环境是在HBuilder中&#xff0c;小编会将代码复制下来&#xff0c;大家复制下来就可以练习了&#xff0c;方便大家学习。 HTML系列文章 已经收录在前端专栏&#xff0c;有需要的宝宝们可以点击前端专栏查看&#xff01; 点…

配置WebStorm键盘快捷键

目录 配置快捷键添加键盘快捷键添加鼠标快捷键添加缩写重置为默认快捷键 禁用双快捷键用户快捷键的保存位置与操作系统冲突 配置快捷键 WebStorm包含预定义的快捷键&#xff0c;同时允许自定义快捷键。要查看快捷键配置&#xff0c;请打开“设置”对话框&#xff0c;然后选择K…

Java 21 + Spring Boot 3.5:AI驱动的高性能框架实战

简介 在微服务架构日益普及的今天,如何构建一个既高性能又具备AI驱动能力的后端系统成为开发者关注的焦点。本篇文章将深入探讨Java 21与Spring Boot 3.5的结合,展示如何通过Vector API和JIT优化实现单线程性能提升30%,并利用飞算JavaAI生成智能重试机制和超时控制代码,解…

Matrix-Game:键鼠实时控制、实时生成的游戏生成模型(论文代码详细解读)

1.简介 本文介绍了一种名为Matrix-Game的交互式世界基础模型&#xff0c;专门用于可控的游戏世界生成。 Matrix-Game通过一个两阶段的训练流程来实现&#xff1a;首先进行大规模无标签预训练以理解环境&#xff0c;然后进行动作标记训练以生成交互式视频。为此&#xff0c;研…

AI生成信息准确性,Ask-Refine提问策略,Agent最少的工具箱是什么样的?

关于AI生成信息准确性的探讨 在社群聊天记录中&#xff0c;用户提出在使用多种AI工具搜索培生出版企业上市信息时&#xff0c;遇到80%信息错误的问题&#xff0c;质疑AI为何无法胜任简单的网络信息爬取任务&#xff0c;并表达了对AI实用性的期望。 我抽空对此做出解答&#xff…

Linux系统中部署java服务(docker)

1、不使用docker ✅ 1. 检查并安装 Java 环境 检查 Java 是否已安装&#xff1a; java -version✅ 2. 上传 Java 项目 JAR 文件 可以创建一个server文件夹&#xff0c;然后上传目录 查看当前目录 然后创建目录上传jar包 ✅ 3. 启动 Java 服务 java -jar hywl-server.jar…

遨游科普:三防平板是什么?有什么功能?

清晨的露珠还挂在帐篷边缘&#xff0c;背包里的三防平板却已开机导航&#xff1b;工地的尘土飞扬中&#xff0c;工程师正通过它查看施工图纸&#xff1b;暴雨倾盆的救援现场&#xff0c;应急队员用它实时回传灾情数据……这些看似科幻的场景&#xff0c;正因三防平板的普及成为…

Flask Docker Demo 项目指南

首先&#xff0c;创建一个新的项目目录并创建必要的文件&#xff1a; mkdir flask-docker-demo cd flask-docker-demo创建一个简单的Flask应用 (app.py)&#xff1a; from flask import Flaskapp Flask(__name__)app.route(/) def hello_world():return Hello, Docker World…

GO语言语法---if语句

文章目录 1. 基本语法1.1 单分支1.2 双分支1.3 多分支 2. Go特有的if语句特性2.1 条件前可以包含初始化语句2.2 条件表达式不需要括号2.3 必须使用大括号2.4 判断语句所在行数控制 Go语言的if语句用于条件判断&#xff0c;与其他C风格语言类似&#xff0c;但有一些独特的语法特…