Flink內存模型--flink1.19.1

Flink 的 JobManager 和 TaskManager 在內存分配上有不同的職責和結構。以下是兩者的內存分類及詳細說明:


一、JobManager 內存分類

JobManager 主要負責作業調度、協調(如 Checkpoint 協調)、資源管理等,其內存需求相對較低,主要分為以下幾個部分:
在這里插入圖片描述

1. JVM 堆內存(JVM Heap)
  • 用途
    • 存儲作業的元數據(如 JobGraph、ExecutionGraph)。
    • 管理 Checkpoint 協調信息(如 Checkpoint 觸發邏輯)。
    • 處理客戶端提交作業的請求(如 REST API 交互)。
  • 配置參數
    • jobmanager.memory.heap.size:直接指定堆大小(如 2048m)。
    • jobmanager.memory.heap.fraction:按比例分配(需結合總內存配置)。
2. JVM 元空間(Metaspace)
  • 用途:存儲 JVM 加載的類元數據(Class Metadata)。
  • 配置參數
    • jobmanager.memory.jvm-metaspace.size:默認約 256m,可通過 -XX:MaxMetaspaceSize 調整。
3. JVM 直接內存(Direct Memory)
  • 用途:用于 Netty 網絡通信的堆外內存(如 JobManager 與 TaskManager 間的心跳通信)。
  • 配置參數
    • jobmanager.memory.off-heap.size:默認較小(如 128m),一般無需調整。
4. JVM 開銷(JVM Overhead)
  • 用途:為 JVM 自身預留的內存(如線程棧、本地方法調用)。
  • 配置參數
    • jobmanager.memory.jvm-overhead.min/max/fraction:通常占總內存的 10%。
5. 總內存公式
Total JobManager Memory = Heap + Metaspace + Direct Memory + JVM Overhead + 其他(如 Native 庫)

二、TaskManager 內存分類

TaskManager 是數據計算的核心組件,其內存結構更為復雜,主要分為以下部分:
在這里插入圖片描述

1. 框架堆內存(Framework Heap)
  • 用途:運行 Flink 框架本身的代碼(如 Task 調度、Shuffle 管理)。
  • 配置參數
    • taskmanager.memory.framework.heap.size:默認 128m,一般無需調整。
2. 任務堆內存(Task Heap)
  • 用途:用戶代碼(如 Map、Filter 算子)的堆內存,存儲用戶創建的對象。
  • 配置參數
    • taskmanager.memory.task.heap.size:直接指定大小。
    • taskmanager.memory.task.heap.fraction:按比例分配(默認 0.4)。
3. 托管內存(Managed Memory)
  • 用途:Flink 自動管理的內存,用于批處理排序/哈希、RocksDB 狀態后端、PyFlink 等(詳見之前的總結)。
  • 配置參數
    • taskmanager.memory.managed.sizetaskmanager.memory.managed.fraction(默認 0.4)。
4. 網絡緩沖區(Network Buffers)
  • 用途:TaskManager 間數據傳輸的緩沖區(如 Shuffle、Broadcast)。
  • 配置參數
    • taskmanager.memory.network.min/max/fraction:默認占總內存的 0.1
    • 每個 Buffer 大小:taskmanager.memory.segment-size(默認 32KB)。
5. JVM 元空間(Metaspace)
  • 配置參數
    • taskmanager.memory.jvm-metaspace.size:默認 256m
6. JVM 直接內存(Direct Memory)
  • 用途:用于堆外數據(如 RocksDB 直接訪問內存、Netty 網絡傳輸)。
  • 配置參數
    • taskmanager.memory.off-heap.size:默認不啟用,需顯式配置。
7. JVM 開銷(JVM Overhead)
  • 配置參數
    • taskmanager.memory.jvm-overhead.min/max/fraction:默認占總內存的 0.1
8. 總內存公式
Total TaskManager Memory = Framework Heap + Task Heap + Managed Memory + Network Buffers + Metaspace + Direct Memory + JVM Overhead + 其他(如 Native 庫)

三、配置示例與調優建議

1. JobManager 配置示例
jobmamager.memory.process.size: 8192m   # 總內存 
jobmanager.memory.heap.size: 4096m      # 堆內存 4GB
jobmanager.memory.jvm-metaspace.size: 512m  # 元空間 512MB
jobmanager.memory.jvm-overhead.max: 1024m   # JVM 開銷上限 1GB
2. TaskManager 配置示例
taskmamager.memory.process.size = 10240m    # tm總內存
taskmanager.memory.task.heap.size: 4096m    # 任務堆內存 4GB
taskmanager.memory.managed.size: 8192m      # 托管內存 8GB(用于批處理或 RocksDB)
taskmanager.memory.network.fraction: 0.2    # 網絡緩沖區占比 20%
taskmanager.memory.jvm-metaspace.size: 512m # 元空間 512MB
3. 調優建議
  • JobManager
    • 小規模作業:堆內存 2~4GB 足夠。
    • 大規模作業(如千個 Task):需增大堆內存(如 8GB+)以處理更多元數據。
  • TaskManager
    • 批處理作業:增大托管內存(占比 50%~70%)減少磁盤溢出。
    • 流處理作業(使用 RocksDB):確保托管內存足夠容納 Block Cache(至少 1GB)。
    • 高吞吐場景:增加網絡緩沖區大小或占比,避免背壓。
    • 避免 OOM
      • 若用戶代碼占用堆內存過多,增大 taskmanager.memory.task.heap.size
      • 若元空間不足,調整 -XX:MaxMetaspaceSize

四、常見問題排查

  1. JobManager OOM

    • 現象:作業提交失敗或頻繁 Full GC。
    • 解決:增大 jobmanager.memory.heap.size,檢查元數據規模(如超大狀態)。
  2. TaskManager OOM

    • Task Heap OOM:用戶代碼生成過多對象 → 增大任務堆內存。
    • Managed Memory OOM:批處理溢出頻繁或 RocksDB 緩存不足 → 增大托管內存。
    • Metaspace OOM:類加載過多 → 調整 -XX:MaxMetaspaceSize
  3. 網絡瓶頸

    • 現象:反壓(Backpressure)或低吞吐。
    • 解決:增大 taskmanager.memory.network.fractiontaskmanager.memory.segment-size

五、總結

  • JobManager:輕量級協調者,內存需求集中在堆和元空間。
  • TaskManager:核心計算節點,需平衡任務堆內存、托管內存和網絡緩沖區。
  • 調優核心:根據作業類型(批/流)、狀態后端(Heap/RocksDB)和集群規模動態調整。建議通過 Flink Web UI 監控內存使用率,逐步優化配置。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/73979.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73979.shtml
英文地址,請注明出處:http://en.pswp.cn/web/73979.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

華為數字化轉型-方法篇

1 方法篇-3-愿景驅動的數字化轉型規劃 1.2 業務戰略是數字化轉型的龍頭 1.3 數字時代,企業需要適時地調整業務戰略 1.3.1 引入數字化商業模式 引入數字化商業模式包括改變與客戶做生意的方式,改變銷售的渠道,基于產業互聯網重新定位與行 業…

常用的排序算法------練習4

1. 題目 2. 思路和題解 這道題是很經典的荷蘭國旗問題,根據題目意思,要對這個數組按照顏色排序,而此時現在的紅、白、藍三個顏色分別對應0,1,2,因此可以想到使用冒泡排序對該數組進行排序。 代碼如下&…

傳統神經網絡、CNN與RNN

在網絡上找了很多關于深度學習的資料,也總結了一點小心得,于是就有了下面這篇文章。這里內容較為簡單,適合初學者查看,所以大佬看到這里就可以走了。 話不多說,上圖 #mermaid-svg-Z3k5YhiQ2o5AnvZE {font-family:&quo…

1371. 貨幣系統-dp背包問題

給定 V種貨幣(單位:元),每種貨幣使用的次數不限。 不同種類的貨幣,面值可能是相同的。 現在,要你用這 V種貨幣湊出 N 元錢,請問共有多少種不同的湊法。 輸入格式 第一行包含兩個整數 V 和 N…

python和Java的區別

Python和Java是兩種流行的編程語言,它們之間有一些重要的區別: 語法:Python是一種動態類型的腳本語言,語法簡潔明了,通常使用縮進來表示代碼塊。Java是一種靜態類型的編程語言,語法更為嚴格,需要…

正則化是什么?

正則化(Regularization)是機器學習中用于防止模型過擬合(Overfitting)的一種技術,通過在模型訓練過程中引入額外的約束或懲罰項,降低模型的復雜度,從而提高其泛化能力(即在未見數據上…

計算機網絡——傳輸層(TCP)

傳輸層 在計算機網絡中,傳輸層是將數據向上向下傳輸的一個重要的層面,其中傳輸層中有兩個協議,TCP,UDP 這兩個協議。 TCP 話不多說,我們直接來看協議報頭。 源/目的端口號:表示數據從哪個進程來&#xff0…

界面控件DevExpress WinForms v25.1 - 人工智能(AI)方面全新升級

DevExpress WinForms擁有180組件和UI庫,能為Windows Forms平臺創建具有影響力的業務解決方案。DevExpress WinForms能完美構建流暢、美觀且易于使用的應用程序,無論是Office風格的界面,還是分析處理大批量的業務數據,它都能輕松勝…

WinFrom真入門(1)——Windows窗體應用概念

窗體的基本結構 用Winform開發的桌面程序,是在Windows操作系統上運行的,這個不用多說。窗體(Form)的作用?:窗體是用戶交互的容器,承載按鈕、文本框等控件,構成應用程序的界面?。 在Windows操…

scss預處理器對比css的優點以及基本的使用

本文主要在vue中演示&#xff0c;scss的基本使用。安裝命令 npm install sass sass-loader --save-dev 變量 SCSS 支持變量&#xff0c;可將常用的值&#xff08;如顏色、字體大小、間距等&#xff09;定義為變量&#xff0c;方便重復使用和統一修改。 <template><…

Postman 如何高效地轉換時間戳?

在 Postman 中&#xff0c;時間戳的處理對于 API 請求和響應的調試和測試至關重要&#xff0c;正確處理時間戳可以確保數據的準確性和一致性&#xff0c;而 Moment 庫和原生 JS 是兩種常見的處理方式。此外&#xff0c;我們還將介紹 Apifox&#xff0c;它提供了更直觀、更簡便的…

iptables學習記錄

一.四表 filter 表&#xff1a; 主要用于控制數據包的過濾&#xff0c;決定數據包是否允許進出及轉發 。比如設置規則允許特定 IP 訪問服務器的 SSH 端口&#xff08;22 端口&#xff09;&#xff0c;或禁止某些 IP 訪問網站端口&#xff08;80 或 443 端口 &#xff09;。可作…

前端自動創建react項目腳手架

步驟&#xff1a;在終端窗口運行如下命令&#xff1a; npm create vitelatest 也可以指定 vite包 版本&#xff0c; 例如&#xff1a; npm create vite4.1.0 npm執行npm install 很慢 還出現證書問題 執行命令行:npm install -g create-vite npm error code UNABLE_TO_GET_IS…

[從零開始學習JAVA ] 了解線程池

前言&#xff1a; 在Java編程中&#xff0c;線程池是一個強大的工具&#xff0c;它能夠管理和復用線程&#xff0c;提供高效的并發處理能力。通過線程池&#xff0c;我們可以有效地控制并發線程的數量&#xff0c;并降低線程創建和銷毀的開銷。本文將引導你深入了解Java中的線程…

Nginx — Nginx處理Web請求機制解析

一、Nginx請求默認頁面資源 1、配置文件詳解 修改端口號為8080并重啟服務&#xff1a; 二、Nginx進程模型 1、nginx常用命令解析 master進程&#xff1a;主進程&#xff08;只有一個&#xff09; worker進程&#xff1a;工作進程&#xff08;可以有多個&#xff0c;默認只有一…

【C++標準IO庫】字符串流

目錄 一、字符串流概述 1.1 流的概念回顧 1.2 字符串流的定義和作用 二、istringstream 的使用 2.1 基本用法 2.2 常見應用場景 三、ostringstream 的使用 3.1 基本用法 3.2 常見應用場景 四、stringstream 的使用 4.1 基本用法 4.2 常見應用場景 五、字符串流的錯…

C語言pthread庫的線程休眠和喚醒的案例

一、代碼如下 #include<stdio.h> #include<pthread.h> // 定義獨占鎖 pthread_mutex_t mutex; // 定義條件信號對象 pthread_cond_t condition; // 初始化函數 void init(){ int code pthread_mutex_init(&mutex, NULL); printf("共享鎖初…

人臉照片比對 API 接口如何對接?

隨著數字化程度加深&#xff0c;身份驗證的重要性也日益凸顯&#xff0c;它成為保障個人信息安全、維護交易秩序的關鍵環節。人臉照片比對 API 接口作為連接人臉比對技術與各類應用的橋梁&#xff0c;正發揮著越來越重要的作用&#xff0c;成為眾多企業和開發者實現高效、安全身…

java學習筆記9——常用類

字符串相關的類&#xff1a; String 指向同一個地址可才相等 注意這個地方&#xff0c;兩個person對象的name實際上指向的是同一個字符串常量池&#xff08;Tom&#xff09; String常用方法 總結&#xff1a; 1.string類的理解(以JDK8為例說明) 1.1 類的聲明 public final cl…

Day 09

文章目錄 指針數組指針和函數技術名詞解釋技術細節課堂筆記 指針數組 #include<stdio.h> int main() {int a[3] {0,1,2};//指針數組&#xff0c;它是數組&#xff0c;每個元素都是指針int *p[3];p[0] &a[0];p[0] a;p[1] &a[1];p[1] a1;p[2] &a[2];p[…