本文分享自华为云社区《一个Flink作业反压的问题分析》,原文作者:Yunz Bao 。

反压(backpressure)是实时计算应用开发中,特别是流式计算中,十分常见的问题。反压意味着数据管道中某个节点成为瓶颈,处理速率跟不上上游发送数据的速率,而需要对上游进行限速。

问题场景

客户作业场景如下图所示,从DMS kafka通过DLI Flink将业务数据实时清洗存储到DWS。

其中,DMS Kafka 目标Topic 6个分区,DLI Flink作业配置taskmanager数量为12,并发数为1。

问题现象

客户在DLI服务共有三个相同规格的队列,该作业在其中003号队列上运行正常,在001和002号队列上都存在严重的反压导致数据处理缓慢。作业列表显示如下图,可以看到Sink反压状态正常,Souce和Map反压状态为HIGH。

问题分析

根据反压情况分析,该作业的性能瓶颈在Sink,由于Sink处理数据缓慢导致上游反压严重。

该作业所定义的Sink类型为DwsCsvSink,该Sink的工作原理如下图所示:Sink将结果数据分片写入到OBS,每一分片写入完成后,调用DWS insert select sql将obs路径下该分片数据load到dws。

因此性能瓶颈出现在分片数据写入到OBS这一步。但问题来了,写同一个桶,为什么在不同队列上的表现不一致?

为此,我们排查了各个队列的CPU、内存和网络带宽情况,结果显示负载都很低。

这种情况下,只能继续分析FlinkUI和TaskManager日志。

数据倾斜?

然后我们在FlinkUI任务情况页面,看到如下情况:Map阶段的12个TaskManager并不是所有反压都很严重,而是只有一半是HIGH状态,难道有数据倾斜导致分配到不同TaskManager的数据不均匀?

然后看Source subTask详情,发现有两个TaskManager读取的数据量是其他几个的几十倍,这说明源端Kafka分区流入的数据量不均匀。难道就是这么简单的问题?

很不幸并不是,通过进一步分析源端数据我们发现Kafka 6个分区数据流入记录数相差并不大。这两个Task只是多消费了部分存量数据,接收数据增长的速度各TaskManager保持一致。

时钟同步

进一步分析TaskManager日志,我们发现单个分片数据写入OBS竟然耗费3min以上。这非常异常,要知道单个分片数据才500000条而已。

进一步通过分析代码发现如下问题:在写OBS数据时,其中一个taskmanager写分片目录后获取该目录的最后修改时间,作为处理该分片的开始时间,该时间为OBS服务端的时间。

后续其他taskmanager向该分片目录写数据时,会获取本地时间与分片开始时间对比,间隔大于所规定的转储周期才会写分片数据。

如果集群节点NTP时间与OBS服务端不同步,本地时间晚于OBS服务端时间,则会造成写入OBS等待。

后续排查集群节点,发现6个节点中一半时间同步有问题,这也和只有一半taskmanager反压严重的现象相对应。

问题修复

在集群节点上执行如下命令,强制时间同步。

systemctl stop ntp
ntpdate ntp.myhuaweicloud.com
systemctl start ntp
systemctl status ntp
date

NTP同步后,作业反压很快消失,故障恢复。

点击关注,第一时间了解华为云新鲜技术~

如何处理分析Flink作业反压的问题?相关推荐

  1. flink 出现反压场景, 异常场景造成Exceeded checkpoint tolerable failure threshold.

    flink 出现反压场景,异常场景造成Exceeded checkpoint tolerable failure threshold. 监控反压情况 根据算子的InPool, OutPool 的比例, ...

  2. 【Flink】Flink 反压机制 导致checkpoint 失败

    1.概述 转载:flink检查点checkpoint失败问题总结-2 问题描述:检查点刚开始是可以的做checkpoint的,后期越来越不能够做checkpoint的情况总结 2.反压问题 2.1 什 ...

  3. Flink 网络流控和反压剖析详解

    传送门:Flink 系统性学习笔记 前言: 本文根据 Apache Flink 系列直播整理而成,由 Apache Flink Contributor.OPPO 大数据平台研发负责人张俊老师分享,社区 ...

  4. 一文弄懂Flink网络流控及反压

    一文弄懂Flink网络流控及反压 1. 为什么需要网络流控? 2. 网络流控的实现:静态限速 3. 网络流控的实现:动态反馈/自动反压 3.1 案例一:Storm 反压实现 3.2 案例二:Spark ...

  5. 一文搞懂 Flink 网络流控与反压机制

    看完本文,你能get到以下知识 Flink 流处理为什么需要网络流控? Flink V1.5 版之前网络流控介绍 Flink V1.5 版之前的反压策略存在的问题 Credit的反压策略实现原理,Cr ...

  6. Flink 网络流控与反压机制

    Flink 流处理为什么需要网络流控? 分析一个简单的 Flink 流任务,下图是一个简单的Flink流任务执行图:任务首先从 Kafka 中读取数据. map 算子对数据进行转换.keyBy 按照指 ...

  7. Flink教程(31)- Flink网络流控及反压

    文章目录 01 引言 02 为什么需要网络流控? 03 网络流控的实现:静态限速 04 网络流控的实现:动态反馈/自动反压 4.1 案例一:Storm 反压实现 4.2 案例二:Spark Strea ...

  8. 背压/反压/BackPressure

    Flink系列文章 更多Flink系列文章请点击Flink系列文章 更多大数据文章请点击大数据好文推荐 转载声明 本文大量内容系转载自以下文章,有删改,并参考其他文档资料加入了一些内容: Apache ...

  9. 第十五篇:如何排查生产环境中的反压问题

    你好,欢迎来到第 15 课时,这一课时我们主要讲解生产环境中 Flink 任务经常会遇到的一个问题,即如何处理好反压问题将直接关系到任务的资源使用和稳定运行. 反压问题是流式计算系统中经常碰到的一个问 ...

最新文章

  1. SmartDroid论文阅读
  2. python 类-Python中的类
  3. 基于OpenCL的深度学习工具:AMD MLP及其使用详解
  4. ITK:为每个像素添加常量
  5. 针对不同浏览器的css
  6. MVC源码分析 - Action查找和过滤器的执行时机
  7. 一张图看懂阿里云网络产品【四】NAT网关
  8. 2019职称计算机考试哪些地区取消,2019年职称计算机考试注意事项
  9. python numpy官方文档_[ Numpy中文文档 ] 介绍 - pytorch中文网
  10. python实现简单银行管理系统
  11. 使用Graghics2D实现证书签字盖章功能总结
  12. 等保2.0 等保二级基本要求与测评控制点
  13. LM4890功放电路的分析
  14. Addressing Failure Prediction by Learning Model Confidence
  15. 收敛因子和黄金正弦指引机制的蝴蝶优化算法
  16. VS 防反编译(混淆)dll、exe
  17. 企业级LNMP环境搭建
  18. 计算机职称照图片,全国职称计算机报名如何上传照片。怎么提示你无需上传照片。可以直接进行报名呢...
  19. 200万像素网络摄像机一天要多少容量
  20. (转载) android项目大全,总有你所需的

热门文章

  1. Bootstrap响应式内嵌元素
  2. CSS 块格式化上下文 BFC
  3. verp中joint的type、模式的区别
  4. SLAM Cartographer(13)基于Ceres库的扫描匹配器
  5. php 星座运势_星座运势查询示例代码
  6. 魔兽服务器联盟在线,《魔兽世界》怀旧服再开新服,部落联盟泾渭分明?
  7. edge浏览器怎么设置activex_微软在新Edge浏览器中拒绝了ActiveX插件技术
  8. python selenium 处理弹窗_Python+Selenium处理Windows弹窗(非IE弹窗问题)
  9. think php上传图片,上传 · ThinkPHP5.0完全开发手册 · 看云
  10. oracle唯一性索引的用法,sql – Oracle:基于函数的索引选择唯一性