赞
踩
如果用户只是使用了 local 模式运行 flink(比如通过idea),那么只有部分内存配置是生效的,具体配置后面有讲到。
对于集群上运行的大部分程序来说,最简单的是配置下面任意一个:
其余的内存组件将根据默认值或额外配置的选项自动调整。关于其他内存组件的更多细节,可以阅读下一章节。
对于 standalone 部署模式来说,因为我们要声明分配给 flink 自身的内存大小,所以配置 Total Flink memory 更合适。
对于容器化部署模式来说,配置 Total Process Memory 更好。因为 Total Process Memory 实际上代表 Flink JVM 进程占用的总内存,也是容器允许 TM 占用内存的上线,超过这个值就会被容器杀掉。
另一种方法是配置 task heap (taskmanager.memory.task.heap.size) 和 managed memory(taskmanager.memory.managed.size). 这是一种细粒度的配置方式。
注意
:上面提到的三种配置方式,必须至少选择一种进行配置(官方建议只选一种),否则 Flink 会启动失败。这三种配置没有默认值,必须选择一种配置:
注意
:不建议同时显式地配置 Total Flink memory 和整个 Total Process Memory 。由于潜在的内存配置冲突,它可能导致部署失败。其他内存组件的额外配置也需要谨慎,因为它可能会产生更多的配置冲突。
除了上一小节提到的总内存配置,用户可以显示的指定 task heap 和 managed memory。例如当我们需要确定的内存时,可以直接通过这种配置指定,不再需要像之前那样,从总内存中计算出 task heap.
其余的内存组件将根据默认值或额外配置的选项自动调整。
如果你想确保你的代码有一定数量的JVM堆可用,可以显式地设置任务堆内存(taskmanager.memory.task.heap.size)。它将被添加到JVM堆大小中,并将专用于运行用户代码的Flink操作符。
直接影响 task executor 的 -Xmx and -Xms 参数:
-Xmx and -Xms = flink framework Heap(默认 128M) + Task Heap
Managed memory 由 flink 管理,并且使用的 native memory (off-heap). 使用 Managed memory 的有:
Managed memory 有两种配置方法:
taskmanager.memory.managed.size 会覆盖通过 fraction 计算得出的大小
用户申请的 off-heap 被算做 task off-heap memory,通过 taskmanager.memory.task.off-heap.size 配置。
注意
:用户也可以调整 framework off-heap memory,即 flink 框架使用的堆外内存。这个是高级配置,最好确定需要时才进行调整。
flink 将 framework off-heap memory 和 task off-heap memory 纳入 JVM 的 direct memory 限制参数中:
-XX:MaxDirectMemorySize = Framework Off-heap + Task Off-Heap + Network Memory
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。