• Apache Flink快速入门-Flink内存优化


    设置Flink 的进程内存 

    Apache Flink 通过严格控制其各种组件的内存使用情况,在 JVM 之上提供高效的工作负载。Flink本身开箱即用时具备为所有配置提供合理的默认值,同时也为我们用户预留了性能调优入口配置接口,Flink 允许对集群内的内存分配进行高级和细粒度的调整。

    以下的内存配置适用于 TaskManager 的1.10和 JobManager 进程的1.11如果从早期版本升级 Flink,请查看本博的迁移指南文章, 因为1.101.11版本引入了许多更改

    配置总内存 

    Flink JVM 进程总进程内存由 Flink 应用程序消耗的内存(总 Flink 内存)和 JVM 运行进程所消耗的内存组成

    在 Flink 中设置内存最简单的方法是配置以下两个选项之一:

      成分    任务管理器的选项    作业管理的选项  
    Flink 总内存 taskmanager.memory.flink.size jobmanager.memory.flink.size
    总进程内存 taskmanager.memory.process.size jobmanager.memory.process.size
    对于本地执行,请参阅TaskManagerJobManager进程的详细信息

    其余的内存组件将根据默认值或额外配置的选项自动调整。另请参阅如何为TaskManagerJobManager内存设置其他组件

    配置Flink 总内存更适合独立部署 ,在这种部署中,您要声明为 Flink 本身分配了多少内存。如果您配置总进程内存,则声明应分配给 Flink JVM 进程的内存总量。对于容器化部署,它对应于请求容器的大小。

    另一种设置内存的方法是配置整个 Flink 内存所需的内部组件,这些组件特定于具体的 Flink 进程

    必须使用上述三种方式中的一种来配置 Flink 的内存(本地执行除外),否则 Flink 启动将失败。这意味着必须明确配置以下没有默认值的选项子集之一:

      对于任务管理器:    对于 JobManager:  
    taskmanager.memory.flink.size jobmanager.memory.flink.size
    taskmanager.memory.process.size jobmanager.memory.process.size
    taskmanager.memory.task.heap.size
    和 taskmanager.memory.managed.size
    jobmanager.memory.heap.size
    不建议 同时显式配置总进程内存总 Flink 内存由于潜在的内存配置冲突,可能会导致部署失败。配置其他内存组件也需要小心,因为它可能会产生进一步的配置冲突。

    JVM 参数

    Flink 根据配置或派生的内存组件大小,在启动其进程时显式添加以下内存相关的 JVM 参数:

      JVM 参数    任务管理器    JobManager   
    -Xmx-Xms Framework + Task Heap Memory JVM 堆内存 (*)
    -XX:MaxDirectMemorySize
    (总是只为 TaskManager 添加,参见JobManager 的注释)
    Framework + Task Off-heap (**) + Network Memory 堆外内存 (**),(***)
    -XX:MaxMetaspaceSize JVM 元空间 JVM 元空间

    (*) 请记住,根据所使用的 GC 算法,您可能无法使用全部堆内存。一些 GC 算法会为自己分配一定数量的堆内存。这将导致Heap 指标返回不同的最大值
    (**) 请注意,用户代码中内存的本机非直接使用也可以作为堆外内存的一部分。
    (***)只有在设置了相应选项时,才会为JobManager 进程添加 JVM Direct 内存限制jobmanager.memory.enable-jvm-direct-memory-limit

    另请查看TaskManager和 JobManager的详细内存模型以了解如何配置相关组件。

    根据比例限制的组件

    本节描述了选项的配置细节,这些选项可以是其他内存大小的一小部分,同时受最小-最大范围的约束:

    • JVM 开销可能是总进程内存的一小部分
    • 网络内存可以是Flink 总内存的一小部分(仅适用于 TaskManager)

    另请查看TaskManager和 JobManager的详细内存模型以了解如何配置相关组件。

    这些组件的大小总是必须在其最大值和最小值之间,否则 Flink 启动将失败。最大值和最小值具有默认值或可以通过相应的配置选项显式设置。例如,如果您只设置以下内存选项:

    • 总进程内存= 1000Mb,
    • JVM 开销最小值= 64Mb,
    • JVM 最大开销= 128Mb,
    • JVM 开销比例= 0.1

    那么JVM 开销将为 1000Mb x 0.1 = 100Mb,在 64-128Mb 的范围内。

    请注意,如果您配置相同的最大值和最小值,它会有效地将大小固定为该值。

    如果没有明确配置组件内存,那么 Flink 会根据总内存使用分数来计算内存大小。计算值由其相应的最小/最大选项限制。例如,如果只设置了以下内存选项:

    • 总进程内存= 1000Mb,
    • JVM 开销最小值= 128Mb,
    • JVM 最大开销= 256Mb,
    • JVM 开销比例= 0.1

    那么JVM开销将为128Mb,因为从比例派生的大小是100Mb,并且小于最小值。

    如果定义了总内存及其其他组件的大小,也可能会忽略此开销比例在这种情况下,JVM 开销是总内存的其余部分。派生值仍必须在其最小/最大范围内,否则配置将失败。例如,假设只设置了以下内存选项:

    • 总进程内存= 1000Mb,
    • 任务堆= 100Mb,(类似的例子可以是JobManager中的JVM堆
    • JVM 开销最小值= 64Mb,
    • JVM 最大开销= 256Mb,
    • JVM 开销分数= 0.1

    总进程内存的所有其他组件都有默认值,包括默认的托管内存分数(或JobManager 中的堆外内存)。那么JVM 开销就不是比例派生的值大小了 (1000Mb x 0.1 = 100Mb),而是总进程内存的其余部分,它们要么在 64-256Mb 的范围内,要么失败。

  • 相关阅读:
    百度地图定位经纬度返回4.9E-324有关问题
    急!JDBC问题,发生通信错误。错误位置:Reply.fill()。消息:数据不足。 ERRORCODE=-4499, SQLSTATE=08001
    Android 图片添加水印图片或者文字
    查询出多条记录,取最大或最小的某条件的记录,取唯一记录
    listView获取item的Edit内容,listView中的edit内容在滚动时自动赋值了前面的内容
    ListView中的item的按照和item点击事件并存
    update select
    db2 怎么计算两个时间相差多少个月。如2015-10-10 和2014-1-12
    解决AndroidADT自带Eclipse编辑器不能自动代码提示的问题
    python协程详解,gevent asyncio
  • 原文地址:https://www.cnblogs.com/BlogNetSpace/p/15120041.html
Copyright © 2020-2023  润新知