一、內存構成詳解
組成部分 | 配置參數 | 描述 |
---|---|---|
框架堆內存(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 |
Flink 負責分配和管理的本地(堆外)內存 |
直接內存 | taskmanager.memory.task.off-heap.size | 用戶代碼中分配的堆外內存 |
四、jobmanager內存管理
JobManager 是 Flink 集群的控制單元。 它由三種不同的組件組成:ResourceManager、Dispatcher 和每個正在運行作業的 JobMaster。
配置項 | 配置參數 | 解釋 |
---|---|---|
堆內存 | jobmanager.memory.heap.size |
用於(1)Flink 框架 (2)在作業提交時(例如一些特殊的批處理 Source)及 Checkpoint 完成的回調函數中執行的用戶代碼 |
堆外內存 |
|
用於(1)Flink 框架依賴(例如 Akka 的網絡通信)(2)在作業提交時(例如一些特殊的批處理 Source)及 Checkpoint 完成的回調函數中執行的用戶代碼 是否啟用 JVM 直接內存限制。 如果該配置項設置為 堆外內存的大小,如遇 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 開銷的本地內存,例如棧空間、垃圾回收空間等。該內存部分為基於進程總內存的受限的等比內存部分 |