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.pswp.cn/bicheng/81519.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81519.shtml
英文地址,請注明出處:http://en.pswp.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;但有一些獨特的語法特…