Flink调优初次笔记
资源配置优化
从1.11开始,增加了一个通用客户端模式,(-t yarn-job)
TaskManager内存模型
Flink既使用堆内存,又使用堆外内存。
指定进程内存
JVM metaspace:JVM元空间,默认256M
JVM 执行内存:执行开销。有最小值和最大值。计算公式为:进程内存*0.1
框架内存:
堆内和堆外。不计入Slot的资源开销。
Task内存:执行用户代码使用的内存。
堆内:没有指定
堆外:默认关闭
内存大小:其他组件分配完后,其余都是Task内存。
网络缓冲内存(属于堆外):用于数据交换
三个参数:比例(0.1),最小值(64M),最大值(1G);
是Flink的总内存(进程内存-JVM内存)
托管内存:比例(0.4),Flink内存。
可以指定具体的大小(默认是none)。
yarn配置文件
capacity-scheduler.xml
这个文件里面有个默认的策略:
<property>
<name>yarn.scheduler.capacity.resource-calculator</name>
<value>org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator</value>
<description>
The ResourceCalculator implementation to be used to compare
Resources in the scheduler.
The default i.e. DefaultResourceCalculator only uses Memory while
DominantResourceCalculator uses dominant-resource to compare
multi-dimensional resources such as Memory, CPU etc.
</description>
</property>
这个策略只会考虑内存。不会考虑CPU。CPU默认为1
需要将这个value换成这个:
<value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value>
这个策略会考虑CPU资源。我们在提交时指定的CPU数量才会生效。
slot只会隔离内存。不会隔离CPU。也就是说,slot共享CPU。
Flink反压
两个算子A,B。
A有ResultPartition
B有InputGet
反应的场景:数据洪峰、垃圾回收停顿
Flink Job
对算子指定UUID。
如果不指定UUID的话,会有可能造成下面的情况:
从保存点开启新任务时。会导致映射失败。
链路延迟
可以在普罗米修斯里面监控到。在webUI里面死活没有
对象重用
Flink SQL 优化
设置TTL
开启MiniBatch:减少对state的访问。减少数据的输出量
LocalGlobal : 用于数据倾斜