flink 内存配置(一):设置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中设置内存最简单的方法是配置以下两个选项中的一个:

|----------------------|---------------------------------|--------------------------------|
| Component | Option for TaskManager | Option for JobManager |
| Total Flink memory | taskmanager.memory.flink.size | jobmanager.memory.flink.size |
| Total process memory | taskmanager.memory.process.size | jobmanager.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.size | jobmanager.memory.flink.size |
| taskmanager.memory.process.size | jobmanager.memory.process.size |
| taskmanager.memory.task.heap.size and taskmanager.memory.managed.size | jobmanager.memory.heap.size |

2. JVM参数

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

|--------------------------------------------------------------------------------------|---------------------------------------------------|---------------------------------|
| JVM Arguments | Value for TaskManager | Value for JobManager |
| -Xmx and -Xms | Framework + Task Heap Memory | JVM Heap Memory (*) |
| -XX:MaxDirectMemorySize (always added only for TaskManager, see note for JobManager) | Framework + Task Off-heap (**) + Network Memory | Off-heap Memory (**),(***) |
| -XX:MaxMetaspaceSize | JVM Metaspace | JVM 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/

相关推荐
君不见,青丝成雪3 小时前
Flink双流join
大数据·数据仓库·flink
好好先森&5 小时前
Linux系统:C语言进程间通信信号(Signal)
大数据
EkihzniY5 小时前
结构化 OCR 技术:破解各类检测报告信息提取难题
大数据·ocr
吱吱企业安全通讯软件5 小时前
吱吱企业通讯软件保证内部通讯安全,搭建数字安全体系
大数据·网络·人工智能·安全·信息与通信·吱吱办公通讯
云手机掌柜5 小时前
Tumblr长文运营:亚矩阵云手机助力多账号轮询与关键词布局系统
大数据·服务器·tcp/ip·矩阵·流量运营·虚幻·云手机
拓端研究室8 小时前
专题:2025全球消费趋势与中国市场洞察报告|附300+份报告PDF、原数据表汇总下载
大数据·信息可视化·pdf
阿里云大数据AI技术10 小时前
MaxCompute聚簇优化推荐功能发布,单日节省2PB Shuffle、7000+CU!
大数据
Lx35213 小时前
Hadoop小文件处理难题:合并与优化的最佳实践
大数据·hadoop
激昂网络14 小时前
android kernel代码 common-android13-5.15 下载 编译
android·大数据·elasticsearch