当前位置: 首页 > news >正文

flink 内存配置(一):设置Flink进程内存

flink 内存配置(一):设置Flink进程内存

flink 内存配置(二):设置TaskManager内存

flink 内存配置(三):设置JobManager内存

flink 内存配置(四):内存调优和问题处理

Apache Flink通过严格控制各个组件的内存使用,在JVM之上提供了高效的工作负载。虽然Flink社区努力为所有配置提供合理的默认值,但由于用户部署在Flink上的应用范围很广,这并不总是可行的。为了给用户提供最大的生产价值,Flink支持对集群内的内存分配进行高层和细粒度的调优。
下面进一步描述的内存配置适用于1.10版本之后的TaskManager进程和1.11版本之后的JobManager进程。

1. 配置 Total Memory

Flink JVM进程的总进程内存(Total Process Memory)由Flink应用程序消耗的内存(Flink总内存即Total Flink Memory)和运行该进程的JVM消耗的内存组成。Flink总内存消耗包括JVM堆和非堆(直接内存或本地内存)内存的使用。如下图:

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

ComponentOption for TaskManagerOption for JobManager 
Total Flink memorytaskmanager.memory.flink.sizejobmanager.memory.flink.size
Total process memorytaskmanager.memory.process.sizejobmanager.memory.process.size

其余的内存组件将根据默认值或额外配置的选项自动调整。请参阅后面章节如何设置TaskManager和JobManager内存的其他组件。

对于本来就需要声明给Flink占用多少内存的standalone deployments部署方式来说,配置Flink总内存更合适。Flink总内存分为JVM堆内存和堆外内存。原因在于:总进程内存无关紧要,因为它也不会受控于yarn或k8s。

而对于容器化部署方式(yarn或k8s)来说,配置Flink JVM进程的总进程内存是更合适,他的大小对应于容器(container)的大小。

设置内存的另一种方法是配置Flink总内存里的各个具体组件的内存大小。具体配置见 flink 内存配置(二)和flink 内存配置(三).

上面一共说了3种配置方法:1是配置Total process memory;2是配置Total Flink memory;3是具体配置 Total Flink memory里各个组件的具体内存大小。即如下,必须显式的配置以上三种里的一种,不然flink就会启动失败。当然也不建议同时配置Total process memory和Total Flink memory,容易引发内存配置的冲突,而导致启动失败,配置其他内存组件也需要谨慎,因为它可能产生进一步的配置冲突。

for TaskManager:for JobManager:
taskmanager.memory.flink.sizejobmanager.memory.flink.size
taskmanager.memory.process.sizejobmanager.memory.process.size

taskmanager.memory.task.heap.size

and taskmanager.memory.managed.size

jobmanager.memory.heap.size

2. JVM参数

flink提供了以下jvm参数配置:

JVM ArgumentsValue for TaskManagerValue for JobManager
-Xmx and -XmsFramework + Task Heap MemoryJVM Heap Memory (*)
-XX:MaxDirectMemorySize
(always added only for TaskManager, see note for JobManager)
Framework + Task Off-heap (**) + Network MemoryOff-heap Memory (**),(***)
-XX:MaxMetaspaceSizeJVM MetaspaceJVM Metaspace

说明:

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

3. 有比例限制的组件

本节将介绍一些选项的配置细节,这些选项可以是其他内存大小的一部分比值(即乘以fraction参数),同时受到 最小 - 最大范围 的限制,例如:

  • JVM Overhead 可以是总进程内存的一部分。
  • Network Memory可以是 Flink 总内存的一部分(仅适用于 TaskManager)。

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

  • total Process memory = 1000MB,
  • JVM Overhead min = 64MB,
  • JVM Overhead max = 128MB,
  • JVM Overhead fraction = 0.1

然后JVM Overhead值就是 1000MB x 0.1 = 100MB, 在64-128MB范围之间。

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

如果不显式配置组件内存,Flink会根据总内存计算出内存大小。计算值由相应的min/max选项限制。例如,如果只设置了以下内存选项:

  • total Process memory = 1000MB,
  • JVM Overhead min = 128MB,
  • JVM Overhead max = 256MB,
  • JVM Overhead fraction = 0.1

那么 JVM Overhead 将是128MB,因为由fraction比例得出的大小是100MB,小于最小值。

如果总内存及其其他组成部分的大小已经定义,那么这个比例也可能被忽略。在这种情况下,JVM Overhead就是总内存的剩余部分。派生值仍然必须在其最小/最大范围内,否则配置将失败。例如,假设只设置了以下内存选项。

  • total Process memory = 1000MB,
  • task heap = 100MB, (similar example can be for JVM Heap in the JobManager)
  • JVM Overhead min = 64MB,
  • JVM Overhead max = 256MB,
  • JVM Overhead fraction = 0.1

进程总内存的所有其他组件都有默认值,包括默认 Managed Memory 分数(或 JobManager 中的 Off-heap Memory)。那么JVM Overhead 不是这个部分(1000MB x 0.1 = 100MB),而是整个进程内存的剩余部分,这些部分要么在64-256MB范围内,要么失败。

参考网址:

https://nightlies.apache.org/flink/flink-docs-release-1.20/docs/deployment/memory/mem_setup/


http://www.mrgr.cn/news/65994.html

相关文章:

  • 操作系统进程的描述与控制习题
  • Remix部署智能合约时报错:Gas estimation failed
  • unity搭建场景学习
  • 消息队列面试——打破沙锅问到底
  • C语言案例——青蛙跳台阶问题
  • 什么是 OpenTelemetry?
  • 利索能及——免费专利检索平台,助力全球创新者获取知识产权保护
  • 正在进行中人生之超凡将来,光明将来的逐步建立和尝试实践以及验证卦象案例集合树库(Book)例1工期卦-雷泽归妹变震为雷
  • aosp安卓15新特性dump的wms窗口层级树优化的更加美观
  • 使用 Nginx 部署 Python 项目
  • 压缩机排气保证曲线的解读
  • 如何利用AI分析上市企业财报
  • yolo系列各种环境配置运行
  • 【算法】【优选算法】双指针(下)
  • h5web浏览器获取腾讯地图经纬度
  • 七款超好用主流图纸加密软件推荐|2024图纸加密软件最佳选择!
  • xlwings通过数字索引(i,j)读取单元格数据的方法
  • 【comfyui教程】ComfyUI 完全入门:ControlNet 使用教程
  • 第二届全国高校软件测试开发教育峰会在韩山师范学院隆重举办!
  • 微服务架构面试内容整理-Ribbon
  • 正式挑战谷歌,OpenAI 全面发布 ChatGPT Search 搜索引擎,将人人免费使用
  • 内衣洗衣机哪个牌子好用?5款高评分内衣洗衣机年终测评
  • 【汇编语言】[BX]和loop指令(二)——在Debug中跟踪用loop指令实现的循环程序
  • svdsvewv
  • react项目详细搭建教程
  • 深度学习入门(Python )讲义免费下载