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

反应的场景:数据洪峰、垃圾回收停顿

对算子指定UUID。
如果不指定UUID的话,会有可能造成下面的情况:
从保存点开启新任务时。会导致映射失败。

链路延迟

可以在普罗米修斯里面监控到。在webUI里面死活没有

对象重用

设置TTL

开启MiniBatch:减少对state的访问。减少数据的输出量

LocalGlobal : 用于数据倾斜

posted @ 2024-05-04 15:37  啦啦啦one  阅读(16)  评论(0编辑  收藏  举报