Flink 调优总结

发布时间:2025-01-12 19:09

定期回顾总结一天,优化时间安排 #生活常识# #时间管理建议# #生活作息调整#

最新推荐文章于 2024-04-16 11:18:56 发布

Michealkz 于 2021-01-09 20:23:04 发布

在大数据领域我们都知道,开发是最简单,任务的合理调优、问题排查才是最重要的作者结合线上出现的一些问题,总结了一些任务调优需要注意的点。

Flink任务延迟高,想解决这个问题,你会如何入手?

在Flink的后台任务管理中,我们可以看到Flink的哪个算子和task出现了反压。最主要的手段是资源调优和算子调优。资源调优即是对作业中的Operator的并发数(parallelism)、CPU(core)、堆内存(heap_memory)等参数进行调优。作业参数调优包括:并行度的设置,State的设置,checkpoint的设置。

Flink调优常用原则:

先看指标,定位问题?再看资源,是否足够?三看吞吐,是否反压?四看JVM,是否OOM?

先看指标,定位问题

Flink 提供的 Metrics 可以在 Flink 内部收集一些指标,通过这些指标让开发人员更好地理解作业或集群的状态。由于集群运行后很难发现内部的实际状况,跑得慢或快,是否异常等,开发人员无法实时查看所有的 Task 日志,比如作业很大或者有很多作业的情况下,该如何处理?此时 Metrics 可以很好的帮助开发人员了解作业的当前状况。

再看资源,是否足够

我们通过上述的指标定位问题时,基本可以通过延迟与吞吐指标可以对任务的性能进行精准的判断,精确的找到问题发生的代码位置。一般这些位置会出现以下错误:

Operator的并发数(parallelism)不合理CPU(core)不合理堆内存(heap_memory)等参数设置不合理并行度的设置不合理State的设置不合理checkpoint的设置不合理

我们在设置这些参数时要注意:

并行度(parallelism):保证足够的并行度,并行度也不是越大越好,太多会加重数据在多个solt/task manager之间数据传输压力,包括序列化和反序列化带来的压力。CPU:CPU资源是task manager上的solt共享的,注意监控CPU的使用。内存:内存是分solt隔离使用的,注意存储大state的时候,内存要足够。网络:大数据处理,flink节点之间数据传输会很多,服务器网卡尽量使用万兆网卡。

三看吞吐,是否反压

关于 Flink 的反压问题,我们之前介绍的已经够多了。《Flink网络传输优化》Flink 内部是基于 producer-consumer 模型来进行消息传递的,Flink的反压设计也是基于这个模型。Flink 使用了高效有界的分布式阻塞队列,就像 Java 通用的阻塞队列(BlockingQueue)一样。下游消费者消费变慢,上游就会受到阻塞。在实践中,很多情况下的反压是由于数据倾斜造成的,这点我们可以通过 Web UI 各个 SubTask 的 Records Sent 和 Record Received 来确认,另外 Checkpoint detail 里不同 SubTask 的 State size 也是一个分析数据倾斜的有用指标。Flink 1.11 版本中对于 Flink 反压问题本身做了一些优化,例如使用Unaligned Checkpoint + rocksdb生成Checkpoint,使用rocksdb缓存checkpoint, 并且从原来的全量生成改为增量生成的方式, 速度更快。另外还需要注意的是,用户代码的执行效率问题(频繁被阻塞或者性能问题)和TaskManager 的内存以及 GC 问题。

四看JVM,是否OOM?

重要的参数如下:

taskmanager.memory.process.size: 512m taskmanager.memory.framework.heap.size: 64m taskmanager.memory.framework.off-heap.size: 64m taskmanager.memory.jvm-metaspace.size: 64m taskmanager.memory.jvm-overhead.fraction: 0.2 taskmanager.memory.jvm-overhead.min: 16m taskmanager.memory.jvm-overhead.max: 64m taskmanager.memory.network.fraction: 0.1 taskmanager.memory.network.min: 1mb taskmanager.memory.network.max: 256mb 12345678910

他们各自的意思,需要大家去查询一下官方文档。

JVM本身配置的主要参数无非以下这些:

堆设置 -Xms :初始堆大小 -Xmx :最大堆大小 -XX:NewSize=n :设置年轻代大小 -XX:NewRatio=n: 设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4 -XX:SurvivorRatio=n :年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5 -XX:MaxPermSize=n :设置持久代大小 收集器设置 -XX:+UseSerialGC :设置串行收集器 -XX:+UseParallelGC :设置并行收集器 -XX:+UseParalledlOldGC :设置并行年老代收集器 -XX:+UseConcMarkSweepGC :设置并发收集器 垃圾回收统计信息 -XX:+PrintHeapAtGC GC的heap详情 -XX:+PrintGCDetails GC详情 -XX:+PrintGCTimeStamps 打印GC时间信息 -XX:+PrintTenuringDistribution 打印年龄信息等 -XX:+HandlePromotionFailure 老年代分配担保(true or false) 并行收集器设置 -XX:ParallelGCThreads=n :设置并行收集器收集时使用的CPU数。并行收集线程数。 -XX:MaxGCPauseMillis=n :设置并行收集最大暂停时间 -XX:GCTimeRatio=n :设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n) 并发收集器设置 -XX:+CMSIncrementalMode :设置为增量模式。适用于单CPU情况。 -XX:ParallelGCThreads=n :设置并发收集器年轻代收集方式为并行收集时,使用的CPU数。并行收集线程数

12345678910111213141516171819202122232425

我们可以利用一些简单的JVM日志分析工具看出JVM设置的参数问题出在哪里。

网址:Flink 调优总结 https://www.yuejiaxmz.com/news/view/699785

相关内容

Flink 1.8.0中的状态生存时间特性:如何自动清理应用程序的状态
网络优化总结
Flink状态与容错【状态生存时间TTL,清理过期状态】
凸优化总结
神经网络调参总结
厨房年终工作总结报告 厨房总厨年终工作总结(优质8篇)
工作总结优化的实用建议.docx
个人成长总结【优秀8篇】
中式烹调教学工作总结(多篇)
机器学习详解(10):优化器optimizer总结

随便看看