flink-1.10 如何配置 Task Executor 内存

9 篇文章 5 订阅
2 篇文章 0 订阅


flink 分别提供了通用和细粒度的内存配置,来满足不同用户的需求。

1.配置总内存

在这里插入图片描述

  • Total Process Memory: 包括 flink 应用消耗的内存(Total Flink Memory) 和 JVM 消耗的内存
  • Total Flink Memory: 包括 JVM heap, managed memory 和 direct memory

如果用户只是使用了 local 模式运行 flink(比如通过idea),那么只有部分内存配置是生效的,具体配置后面有讲到。

对于集群上运行的大部分程序来说,最简单的是配置下面任意一个:

  • Total Flink memory (taskmanager.memory.flink.size)
  • Total process memory (taskmanager.memory.process.size)

其余的内存组件将根据默认值或额外配置的选项自动调整。关于其他内存组件的更多细节,可以阅读下一章节。

对于 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 会启动失败。这三种配置没有默认值,必须选择一种配置:

  • taskmanager.memory.flink.size
  • taskmanager.memory.process.size
  • taskmanager.memory.task.heap.size and taskmanager.memory.managed.size

注意:不建议同时显式地配置 Total Flink memory 和整个 Total Process Memory 。由于潜在的内存配置冲突,它可能导致部署失败。其他内存组件的额外配置也需要谨慎,因为它可能会产生更多的配置冲突。

2.配置 Task Heap 和 Managed Memory

除了上一小节提到的总内存配置,用户可以显示的指定 task heap 和 managed memory。例如当我们需要确定的内存时,可以直接通过这种配置指定,不再需要像之前那样,从总内存中计算出 task heap.
其余的内存组件将根据默认值或额外配置的选项自动调整。

2.1 Task (Operator) Heap Memory

如果你想确保你的代码有一定数量的JVM堆可用,可以显式地设置任务堆内存(taskmanager.memory.task.heap.size)。它将被添加到JVM堆大小中,并将专用于运行用户代码的Flink操作符。
直接影响 task executor 的 -Xmx and -Xms 参数:

-Xmx and -Xms  =  flink framework Heap(默认 128M) + Task Heap

2.2 Managed Memory

Managed memory 由 flink 管理,并且使用的 native memory (off-heap). 使用 Managed memory 的有:

  • Streaming 作业的 RocksDB state backend
  • Batch 作业可以使用它对中间结果进行排序(sort)、散列表(hash)和缓存(caching )

Managed memory 有两种配置方法:

  • 直接 taskmanager.memory.managed.size 配置
  • 计算 Total Flink Memory * taskmanager.memory.managed.fraction(默认0.4)

taskmanager.memory.managed.size 会覆盖通过 fraction 计算得出的大小

3.配置 Off-Heap Memory (direct or native)

用户申请的 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
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值