Flink的內存管理


一、內存構成詳解

 

 

組成部分     配置參數     描述  
框架堆內存(Framework Heap Memory) taskmanager.memory.framework.heap.size 用於 Flink 框架的 JVM 堆內存(進階配置)。
任務堆內存(Task Heap Memory) taskmanager.memory.task.heap.size 用於 Flink 應用的算子及用戶代碼的 JVM 堆內存。
托管內存(Managed memory) taskmanager.memory.managed.size
taskmanager.memory.managed.fraction
由 Flink 管理的用於排序、哈希表、緩存中間結果及 RocksDB State Backend 的本地內存。
框架堆外內存(Framework Off-heap Memory) taskmanager.memory.framework.off-heap.size 用於 Flink 框架的堆外內存(直接內存或本地內存)(進階配置)。
任務堆外內存(Task Off-heap Memory) taskmanager.memory.task.off-heap.size 用於 Flink 應用的算子及用戶代碼的堆外內存(直接內存或本地內存)。
網絡內存(Network Memory) taskmanager.memory.network.min
taskmanager.memory.network.max
taskmanager.memory.network.fraction
用於任務之間數據傳輸的直接內存(例如網絡傳輸緩沖)。該內存部分為基於 Flink 總內存的受限的等比內存部分。
JVM Metaspace taskmanager.memory.jvm-metaspace.size Flink JVM 進程的 Metaspace。
JVM 開銷 taskmanager.memory.jvm-overhead.min
taskmanager.memory.jvm-overhead.max
taskmanager.memory.jvm-overhead.fraction
用於其他 JVM 開銷的本地內存,例如棧空間、垃圾回收空間等。該內存部分為基於進程總內存的受限的等比內存部分。

二、總內存管理

 

  配置項     TaskManager 配置參數     JobManager 配置參數   解釋 適用場景
Flink 總內存 taskmanager.memory.flink.size jobmanager.memory.flink.size flink所需內存 單機部署
進程總內存 taskmanager.memory.process.size jobmanager.memory.process.size JVM運行flink所需內存 容器化部署

三、taskmanager內存管理

Flink 的 TaskManager 負責執行用戶代碼。根據實際需求為 TaskManager 配置內存將有助於減少 Flink 的資源占用,增強作業運行的穩定性。

 

  配置項     TaskManager 配置參數   解釋
堆內存 taskmanager.memory.task.heap.size 用於 Flink 算子及用戶代碼的執行
托管內存

taskmanager.memory.managed.size
taskmanager.memory.managed.fraction
taskmanager.memory.managed.consumer-weights

Flink 負責分配和管理的本地(堆外)內存
托管內存在Flink總內存中占比
消費者分配(DATAPROC/PYTHON)

直接內存 taskmanager.memory.task.off-heap.size  用戶代碼中分配的堆外內存

四、jobmanager內存管理

JobManager 是 Flink 集群的控制單元。 它由三種不同的組件組成:ResourceManager、Dispatcher 和每個正在運行作業的 JobMaster。

  配置項   配置參數     解釋
堆內存 jobmanager.memory.heap.size 用於(1)Flink 框架 (2)在作業提交時(例如一些特殊的批處理 Source)及 Checkpoint 完成的回調函數中執行的用戶代碼
堆外內存

jobmanager.memory.enable-jvm-direct-memory-limit 

jobmanager.memory.off-heap.size

用於(1)Flink 框架依賴(例如 Akka 的網絡通信)(2)在作業提交時(例如一些特殊的批處理 Source)及 Checkpoint 完成的回調函數中執行的用戶代碼

是否啟用 JVM 直接內存限制。 如果該配置項設置為 true,Flink 會根據配置的堆外內存大小設置 JVM 參數 -XX:MaxDirectMemorySize

堆外內存的大小,如遇 JobManager 進程拋出 “OutOfMemoryError: Direct buffer memory” 的異常,可以嘗試調大該配置

JVM Metaspace jobmanager.memory.jvm-metaspace.size Flink JVM 進程的元空間
JVM Overhead jobmanager.memory.jvm-overhead.min
jobmanager.memory.jvm-overhead.max
jobmanager.memory.jvm-overhead.fraction
用於其他 JVM 開銷的本地內存,例如棧空間、垃圾回收空間等。該內存部分為基於進程總內存的受限的等比內存部分


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM