Flink性能优化小结

本文详细探讨了Flink性能优化的各种策略,包括JVM内存参数、Flink内存、Netty、Akka、并行度、对象重用、checkpoint、网络内存和状态优化等方面,提供了具体的配置建议和注意事项,旨在帮助提升Flink作业的执行效率。
摘要由CSDN通过智能技术生成
  • jvm内存优化

  • 内存优化

  • netty优化

  • akka优化

  • 并行度优化

  • 对象重用

  • checkpoint优化

  • 网络内存调优

  • 状态优化

  • flink数据倾斜优化

  • flink背压

jvm内存参数调优

Flink是依赖内存计算,计算过程中内存不够对Flink的执行效率影响很大。可以通过监控GC(Garbage Collection),评估内存使用及剩余情况来判断内存是否变成性能瓶颈,并根据情况优化。
监控节点进程的YARN的Container GC日志,如果频繁出现Full GC,需要优化GC。

GC的配置:在客户端的"conf/flink-conf.yaml"配置文件中,在“env.java.opts”配置项中添加参数:

-Xloggc:<LOG_DIR>/gc.log -XX:+PrintGCDetails -XX:-OmitStackTraceInFastThrow -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=20 -XX:GCLogFileSize=20M

此处默认已经添加GC日志。

调整老年代和新生代的比值。在客户端的“conf/flink-conf.yaml”配置文件中,在“env.java.opts”配置项中添加参数:“-XX:NewRatio”。如“ -XX:NewRatio=2”,则表示老年代与新生代的比值为2:1,新生代占整个堆空间的1/3,老年代占2/3。

图片

可以通过设置 jobmanager.memory.enable-jvm-direct-memory-limit 对 JobManager 进程的 JVM 直接内存进行限制

Flink内存调优

flink进程内存

图片

 jobmanager相关配置:

图片

taskamanger相关配置:

图片

yarn相关的配置:
yarn.appmaster.vcores    YARN应用程序主机使用的虚拟核心(vcore)的数量。yarn.containers.vcores   每个YARN容器的虚拟核心数(vcore)。默认情况下,vcore数设置为每个TaskManager的插槽数(如果已设置),否则设置为1。为了使用此参数,您的群集必须启用CPU调度。您可以通过设置来做到这一点org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler。
yarn.scheduler.maximum-allocation-vcoresyarn.scheduler.minimum-allocation-vcoresFlink单个task manager的slot数量必须介于这两个值之间
yarn.scheduler.maximum-allocation-mbyarn.scheduler.minimum-allocation-mbFlink的job manager 和task manager内存不得超过container最大分配内存大小。
yarn.nodemanager.resource.cpu-vcores yarn的虚拟CPU内核数,建议设置为物理CPU核心数的2-3倍,如果设置过少,会导致CPU资源无法被充分利用,跑任务的时候CPU占用率不高。

netty优化

Netty Shuffle环境

图片

Network Communication (via Netty)

图片

akka优化

akka.ask.callstack    捕获异步请求的调用堆栈。注意,如果有数百万个并发RPC调用,这可能会增加内存占用。
akka.ask.timeout      用于期望并阻止Akka呼叫的超时。如果Flink由于超时而失败,则应尝试增加此值。超时可能是由于计算机运行缓慢或网络拥塞引起的。超时值需要一个时间单位说明符(ms / s / min / h / d)。
akka.client-socket-worker-pool.pool-size-factor  池大小因子使用以下公式确定线程池大小:ceil(available processors * factor)。然后,结果大小受pool-size-min和pool-size-max值限制。
akka.client-socket-worker-pool.pool-size-max  要限制基于因素的最大线程数。
akka.client-socket-worker-pool.pool-size-min  最小线程数以上限为基础。
akka.client.timeout  60s 客户端上所有阻塞呼叫的超时。
akka.fork-join-executor.parallelism-factor  并行度因子用于通过以下公式确定线程池大小:ceil(available processors * factor)。然后,所得到的大小由并行度最小值和并行度最大值限制。
akka.fork-join-executor.parallelism-max  最大线程数上限为基于因子的并行数。
akka.fork-join-executor.parallelism-min  最小线程数以基于因素的并行度为上限。
akka.framesize  10485760b(10MB)  在JobManager和TaskManager之间发送的消息的最大大小。如果Flink因消息超出此限制而失败,则应增加该限制。消息大小需要大小单位说明符。
akka.fork-join-executor.parallelism-factor  并行度因子用于使用以下公式确定线程池大小:ceil(可用处理器*因子)。然后,结果大小由并行度最小值和并行度最大值限制。
akka.fork-join-executor.parallelism-max      基于并行度的最大线程数上限
akka.fork-join-executor.parallelism-min      基于并行度的最大线程数下限
akka.framesize     JobManager和TaskManager之间发送的最大消息大小。如果Flink失败是因为消息超过了这个限制,那么您应该增加它。消息大小需要大小单位说明符。
akka.retry-gate-closed-for    远程连接断开后,闸门应关闭几毫秒。
akka.server-socket-worker-pool.pool-size-factor   池大小因子用于使用以下公式确定线程池大小:ceil(可用处理器*因子)。然后,结果大小由池大小最小值和池大小最大值限定。
akka.server-socket-worker-pool.pool-size-max     基于上限因子的最大线程数。
akka.server-socket-worker-pool.pool-size-min     基于上限因子的最小线程数
akka.tcp.timeout 所有
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值