系列文章目录
第一章 资源配置调优
第二章 状态及Checkpoint 调优
第三章 反压处理
第四章 数据倾斜
第五章 job优化
第六章 flinksql调优
第七章 常见故障排查
本文目录
前言一、内存设置
TaskManager 内存模型及解释 二.案例分析总结
前言
Flink性能调优的第一步,就是为任务分配合适的资源,在一定范围内,增加资源的分配与性能的提升是成正比的,实现了最优的资源配置后,在此基础上再考虑进行后面论述的性能调优策略。
一、内存设置 TaskManager 内存模型及解释
JVM 特定内存:JVM本身使用的内存,包含JVM的metaspace和overhead
- JVM metaspace:JVM 元空间
taskmanager.memory.jvm metaspace.size ,默认 256 mb
- JVM over head 执行开销: JVM 执行时自身所需要的内容,包括线程堆栈、 IO 、编译缓存等所使用的内存。
taskmanager.memory.jvm overhead.fraction ,默认 0.1 taskmanager.memory.jvm overhead.min ,默认 192mb taskmanager.memory.jvm overhead.max ,默认 1gb
总进程内存*fraction,如果小于配置的 min(或大于配置的 max 大小,则使用 min/max大小
框架内存: Flink 框架,即 TaskManager 本身所占用的内存, 不计入 Slot 的资源中。
堆内:
taskmanager .memory.framework.heap.size 默认 128MB
堆外:
taskmanager .memory.framework.off heap.size ,默认 128MB
Task 内存:Task 执行用户代码时所使用的内存
堆内:
taskm anager.memory.task.heap.size ,默认 none ,由 Flink 内存扣除掉其他部分的内存得到 。
堆外:
taskmanager .memory.task.off heap.size ,默认 0 ,表示不使用堆外内存
网络内存: 网络数据交换所使用的堆外内存大小,如网络数据交换缓冲区
堆外:
taskmanager.memory.network.fractio n ,默认 0.1 taskmanager.memory.network.min ,默认 64mb taskmanager.memory.network.max ,默认 1gb
Flink内存 *fraction ,如果小于 配置的 min (或大于配置的 max 大小,则使用 min/max大小
托管内存: 用于 RocksDB State Backend 的本地内存和批的排序、哈希表、缓存中间结果。
堆外:
taskmanager .memory.managed.fraction ,默认 0.4 taskmanager .memory.managed.size ,默认 none
二.案例分析如果size 没指定,则等于 Flink 内存 *fraction
基于Yarn 模式,一般参数指定的是总进程内存, taskmanager.memory.process.size 比如指定4G,每一部分内存得到大小如下
(1) JVM 元空间 256 , 默认 JVM 执行开销:4g *0.1=409.6m ,在 [192m,1g] 之间,最终结果409.6m Flink内存 = 4g-256m-409.6m=3430.4m (2) 网络内存 3430.4m*0.1=343.04m ,在[64m,1g] 之间,最终结果343.04m (3) 托管内存 3430.4m*0.4=1372.16m (4) 框架内存,堆内和堆外都是 128m (5) Task 堆内内存 3430.4m-128m-128m-343.04m-1372.16m=1459.2m
所以进程 内存给多大 ,每一部分内存需不需要调整 ,可以看内存的使用率来调整 。
以上就是资源配置调优的内容,本文介绍了资源配置调优的相关概念、案例、策略,对于flink作业能使我们快速的在生产环境中进行资源方面的一些优化。



