美文网首页Flink
Flink内存配置

Flink内存配置

作者: zfylin | 来源:发表于2020-09-02 15:57 被阅读0次

    前言

    本文介绍的内存配置方法只适用于Flink 1.10及以上版本。

    相关配置详细说明: Flink Config

    配置 Flink 进程的内存

    Flink JVM 进程的进程总内存(Total Process Memory)包含了由 Flink 应用使用的内存(Flink 总内存)以及由运行 Flink 的 JVM 使用的内存。 Flink 总内存(Total Flink Memory)包括 JVM 堆内存(Heap Memory)和堆外内存(Off-Heap Memory)。 其中堆外内存包括直接内存(Direct Memory)和本地内存(Native Memory)。


    image.png

    配置 Flink 进程内存最简单的方法是指定以下两个配置项中的任意一个:

    配置项 TaskManager 配置参数 JobManager 配置参数
    Flink 总内存 taskmanager.memory.flink.size jobmanager.memory.flink.size
    进程总内存 taskmanager.memory.process.size jobmanager.memory.process.size

    配置 TaskManager 内存

    Flink 的 TaskManager 负责执行用户代码。 根据实际需求为 TaskManager 配置内存将有助于减少 Flink 的资源占用,增强作业运行的稳定性。

    内存模型

    image.png

    如上图所示,下表中列出了 Flink TaskManager 内存模型的所有组成部分,以及影响其大小的相关配置参数。

    组成部分 配置参数 描述
    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<br />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<br />taskmanager.memory.network.max <br />taskmanager.memory.network.fraction 用于任务之间数据传输的直接内存(例如网络传输缓冲)。该内存部分为基于 Flink 总内存受限的等比内存部分
    JVM Metaspace taskmanager.memory.jvm-metaspace.size Flink JVM 进程的 Metaspace。
    JVM Overhead taskmanager.memory.jvm-overhead.min<br />taskmanager.memory.jvm-overhead.max<br />taskmanager.memory.jvm-overhead.fraction 用于其他 JVM 开销的本地内存,例如栈空间、垃圾回收空间等。该内存部分为基于进程总内存受限的等比内存部分

    框架内存

    通常情况下,不建议对框架堆内存框架堆外内存进行调整。 除非你非常肯定 Flink 的内部数据结构及操作需要更多的内存。 这可能与具体的部署环境及作业结构有关,例如非常高的并发度。 此外,Flink 的部分依赖(例如 Hadoop)在某些特定的情况下也可能会需要更多的直接内存或本地内存。

    内存计算

    假设只配置 Total Process Memory = 2gb

    Total Process Memory = Total Flink Memory +JVM Metaspace +JVM Overhead

    JVM Metaspace 通过taskmanager.memory.jvm-metaspace.size配置, 默认96mb

    JVM Overhead 计算:

    配置参数 默认值
    taskmanager.memory.jvm-overhead.min 192mb
    taskmanager.memory.jvm-overhead.max 1gb
    taskmanager.memory.jvm-overhead.fraction 0.1

    首先计算 JVM Overhead = Total Process Memory * taskmanager.memory.jvm-overhead.fraction = 2gb*0.1 = 204.8mb

    如果计算出来的JVM Overhead < taskmanager.memory.jvm-overhead.min则为taskmanager.memory.jvm-overhead.min;

    如果计算出来的JVM Overhead > taskmanager.memory.jvm-overhead.max则为taskmanager.memory.jvm-overhead.max;

    如果计算出来的 taskmanager.memory.jvm-overhead.min <= JVM Overhead <= taskmanager.memory.jvm-overhead.max 则为JVM Overhead .

    因为 192mb< 204.8mb <1gb, 所以 JVM Overhead=204.8mb

    Total Flink Memory = Total Process Memory - JVM Metaspace- JVM Overhead = 2gb - 96mb - 204.8mb = 1747.2mb

    Managed memory = Total Flink Memory * taskmanager.memory.managed.fraction = 1747.2mb * 0.4 = 698.88mb

    Framework Off-heap Memory通过taskmanager.memory.framework.off-heap.size配置, 默认128mb

    Task Off-heap Memory 默认为0byte

    Network Memory 计算方式同JVM overhead

    配置参数 默认值
    taskmanager.memory.network.min 64mb
    taskmanager.memory.network.max 1gb
    taskmanager.memory.network.fraction 0.1

    Total Flink Memory * taskmanager.memory.network.fraction = 1747.2mb * 0.1 = 174.72mb

    64mb < 174.72mb < 1gb,所以 Network Memory=174.72mb

    Direct Memory = Framework Off-heap Memory + Task Off-heap Memory + Network Memory = 128mb + 0 + 174.72mb = 302.72mb

    **Off Heap Memory **= Managed memory + Direct Memory = 698.88mb + 302.72mb = 1001.6mb

    JVM Heap = Total Flink Memory - Off Heap Memory = 1747.2mb - 1001.6mb = 745.6mb  与web-ui显示一致

    Framework Heap Memory 通过taskmanager.memory.framework.heap.size配置, 默认128mb

    Task Heap 剩下的内存 JVM Heap- Framework Heap Memory = 617.6mb

    配置 JobManager 内存

    JobManager 是 Flink 集群的控制单元。 它由三种不同的组件组成:ResourceManager、Dispatcher 和每个正在运行作业的 JobMaster。

    内存模型

    image.png

    如上图所示,下表中列出了 Flink JobManager 内存模型的所有组成部分,以及影响其大小的相关配置参数。

    组成部分 配置参数 描述
    JVM Heap jobmanager.memory.heap.size JobManager 的 JVM 堆内存
    Off Heap jobmanager.memory.off-heap.size JobManager 的堆外内存(直接内存或本地内存)
    JVM Metaspace jobmanager.memory.jvm-metaspace.size Flink JVM 进程的 Metaspace。
    JVM Overhead jobmanager.memory.jvm-overhead.min<br /> jobmanager.memory.jvm-overhead.max<br />jobmanager.memory.jvm-overhead.fraction 用于其他 JVM 开销的本地内存,例如栈空间、垃圾回收空间等。该内存部分为基于进程总内存受限的等比内存

    相关文章

      网友评论

        本文标题:Flink内存配置

        本文链接:https://www.haomeiwen.com/subject/qkjwsktx.html