开发者社区 问答 正文

实时计算Flink中,定位造成反压的原因是什么?

已解决

实时计算Flink中,定位造成反压的原因是什么?

展开
收起
詹姆斯邦德00 2022-10-17 11:16:37 394 分享 版权
1 条回答
写回答
取消 提交回答
  • 推荐回答

    定位到反压节点后,分析造成原因的办法要结合出现反压时候实际现场情况来进行分析,主要的情况主要包含有如下的情况,包含数据倾斜,资源不足数据突增,代码性能问题,节点TM的GC问题,下游的数据源性能问题。

    数据倾斜:通过 Web UI 各个 SubTask 的 Records Sent 和 Records Received 来确认,另外,还可以通过 Checkpoint detail 里不同的 SubTask 的 State Size 来判断是否数据倾斜。

    代码问题:最有用的办法就是对 TaskManager 进行 CPU profile,从中我们可以分析到 Task Thread 是否跑满一个 CPU 核:如果是的话要分析 CPU 主要花费在哪些函数里面,比如我们生产环境中就偶尔遇到卡在 Regex 的用户函数(ReDoS);如果不是的话要看 Task Thread 阻塞在哪里,可能是用户函数本身有些同步的调用,可能是 checkpoint 或者 GC 等系统活动导致的暂时系统暂停。目前flink版本提供了火焰图的来分析CPU的性能瓶颈。

    image.png

    GC 问题分析:包括 TaskManager JVM 各区内存不合理导致的频繁 Full GC 甚至失联。推荐可以通过给 TaskManager 启用 G1 垃圾回收器来优化 GC,并加上 -XX-:+PrintGCDetails 来打印 GC 日志的方式来观察 GC 的问题。通过 GC 日志,分析出单个 Flink TaskManager 堆总大小、年轻代、老年代分配的内存空间,Full GC 后老年代剩余大小等。

    image.png

    数据突增资源不足:这种情况下场景一般是任务运行正常一段时间后,上游数据量出现增大的情况,导致消耗节点大量的CPU或者内存(特别是join节点)从而形成了反压,这种情况可以通过手动调大节点资源或者是使用自动调优。

    image.png

    下游的数据源性能:在发现Sink 端写入性能较差,sink的上游节点出现反压情况,需要结合sink的数据端性能情况是否存在问题需要提升。"

    以上内容摘自《企业级云原生白皮书项目实战》电子书,点击https://developer.aliyun.com/ebook/download/7774可下载完整版

    2022-10-17 19:18:44
    赞同 展开评论