版权声明:本文由王亮原创文章,转载请注明出处: 
文章原文链接:https://www.qcloud.com/community/article/214

来源:腾云阁 https://www.qcloud.com/community

现象

长期运营中发现部署了flume集群的磁盘满,经过排查发现flume的日志目录导致。

具体问题

具体看flume的大文件日志发现,某个MySQL相关的sink持续抛出异常,打印了大量的日志

分析过程

根据这个异常信息(exception)即:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after statement closed
字面意思为MySQL服务的状态(连接)已经关闭的状态下,仍然有提交事务操作,抛出了异常,但这个异常持续抛出,仍需要深入分析。

配置分析

既然是flume抛出的,且与MySQL有关,那缩小问题范围,查找flume里谁在写MySQL。(flume的配置一般位于/etc/flume/conf/agent/flume.conf)


根据配置中唯一一条与MySQL相关的配置逻辑:读取HiveServer的日志,过滤其中的SQL语句(以Metadata collec*过滤),结果存入到sink里配置的MySQL数据表hive_run_sqlinfo。

flumeagent逻辑分析

以上sink里调用了一个com.tencent.tbds.flume.sink.MysqlSinkForMetadata的类,这是一个自定义类,我们在引用路径里找到这个类所在jar并反编译之(decompiler),基本逻辑与注释如下:

Sink初始化阶段

Sink循环执行阶段



Sink关闭阶段

关闭阶段仅仅检查连接是否存在。

可能的原因

从sink的逻辑看,只有在空连接的情况下,sink状态才会是BACKOFF,其他情况下状态都是READY,且在向MySQL提交事务前后,不会检查连接状态,即使在SQL抛出异常的情况下也没有修改sink状态,导致提交抛出异常后,sink循环执行,循环抛出异常。这里就是不断抛出异常的根本。那么连接到底是什么时候关闭的呢?这里的原因猜测有2个:(1)sink长时间与MySQL没有交互,超过连接自动关闭时间;(2)MySQL的异常关闭。

问题确认

是否sink长时间与MySQL无交互
查询MySQL的超时配置如下:

配置为默认配置28800秒即8小时。
查看HiveServer的日志,统计每小时执行SQL的数量如下:

可见,sink与MySQL之间的断开并非二者长期无交互。

是否人为断开服务
查询人为启动MySQL的时间如下:

flume的异常时间如下:(从异常提交的事务本身内容的时间看):

时间吻合。

结论
MySQL服务异常导致flume提交事务时连接中断,且flume没有处理这种异常,引发死循环提交事务,并在这种异常情况下,flume已无法正常工作。

问题重现

根据以上的推论,可进行如下验证这个异常:

HiveServer产生日志

在HUE里执行多次HiveSQL

手动强制关闭MySQL


手动重启flume写入的MySQL实例。

查看flume表现


flume进入无限循环的抛出异常状态,验证成功。

总结

这里的主要原因是MySQL服务异常导致产生的连锁反应。权宜之计可以在sink的代码中提交事务出异常时,修改下sink的状态为BACK.OFF,防止不断打印日志造成机器磁盘满影响其他服务(待验证)。

基于TBDS的flume异常问题排查过程的更多相关文章

  1. 记录一次Flink作业异常的排查过程

    最近2周开始接手apache flink全链路监控数据的作业,包括指标统计,业务规则匹配等逻辑,计算结果实时写入elasticsearch. 昨天遇到生产环境有作业无法正常重启的问题,我负责对这个问题 ...

  2. 一则线上MySql连接异常的排查过程

    Mysql作为一个常用数据库,在互联网系统应用很多.有些故障是其自身的bug,有些则不是,这里以前段时间遇到的问题举例. 问题 当时遇到的症状是这样的,我们的应用在线上测试环境,JMeter测试过程中 ...

  3. 【Redis连接超时】记录线上RedisConnectionFailureException异常排查过程

    项目架构: 部分组件如下: SpringCloudAlibaba(Nacos+Gateway+OpenFeign)+SpringBoot2.x+Redis 问题背景: 最近由于用户量增大,在高峰时期, ...

  4. 一次kibana服务失败的排查过程

    公司在kubernetes集群上稳定运行数月的kibana服务于昨天下午突然无法正常提供服务,访问kibana地址后提示如下信息: 排查过程: 看到提示后,第一反应肯定是检查elasticsearch ...

  5. 基于机器学习的web异常检测

    基于机器学习的web异常检测 Web防火墙是信息安全的第一道防线.随着网络技术的快速更新,新的黑客技术也层出不穷,为传统规则防火墙带来了挑战.传统web入侵检测技术通过维护规则集对入侵访问进行拦截.一 ...

  6. 记一次生产环境Nginx日志骤增的问题排查过程

    摘要:众所周知,Nginx是目前最流行的Web Server之一,也广泛应用于负载均衡.反向代理等服务,但使用过程中可能因为对Nginx工作原理.变量含义理解错误,或是参数配置不当导致Nginx工作异 ...

  7. 干货!一次kafka卡顿事故排查过程

    由于一次功能上线后,导致某数据量急剧下滑,给我们紧张的呢!排查过程也是个学习过程(这其中有大部分是领导们的功劳,不过分享给大家应该也不犯法吧,ᐓ) 1. 确认问题的真实性? 被数据部门告知,某数据量下 ...

  8. CentOS服务器上搭建Gitlab安装步骤、中文汉化详细步骤、日常管理以及异常故障排查

    一, 服务器快速搭建gitlab方法 可以参考gitlab中文社区 的教程centos7安装gitlab:https://www.gitlab.cc/downloads/#centos7centos6 ...

  9. 基于机器学习的web异常检测——基于HMM的状态序列建模,将原始数据转化为状态机表示,然后求解概率判断异常与否

    基于机器学习的web异常检测 from: https://jaq.alibaba.com/community/art/show?articleid=746 Web防火墙是信息安全的第一道防线.随着网络 ...

随机推荐

  1. 炮(cannon)

    炮(cannon)[题目描述] 众所周知,双炮叠叠将是中国象棋中很厉害的一招必杀技.炮吃子时必须隔一个棋子跳吃,即俗称“炮打隔子”. 炮跟炮显然不能在一起打起来,于是rly一天借来了许多许多的炮在棋盘 ...

  2. shell与kernel的理解 转载

    Shell 的英文释义是外壳,与 kernel 内核名词遥相呼应,一外一内,一壳一核.内核就像瑞士银行的金库,存放着客户的黄金等众多的(硬件)资产,闲杂人等(包括客户)当然是严格禁止入内的,而作为客户 ...

  3. .Net用户控件

    用户控件用户控件是个什么东西?自定义的反复重用的控件集合 好处?1.代码重用2.结构良好3.分工开发4.局部缓存 难点:一.交换信息: 注意信息的交换只在相邻层之间进行交换,如果是嵌套交换信息除Ses ...

  4. Refresh / Updating a form screen in Oracle D2k Forms 6i

    Refresh / Updating a form screen in Oracle D2k Forms 6i ProblemYou want to show number of records pr ...

  5. js数组去重的三种常用方法总结

    第一种是比较常规的方法 思路: 1.构建一个新的数组存放结果 2.for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比 3.若结果数组中没有该元素,则存到结果数组中   Array.p ...

  6. java传递和返回对象

    java传递的只是一个引用,一定要注意准确认识在对象传递和赋值时所发生的一切. 事实上,java中的每个对象(除了基本数据类型以外)的标识符都属于指针的一种,但是其使用受到了严格的限制和防范,不仅在编 ...

  7. java正则API简单解析

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. 1.简介: java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. ...

  8. [SAP ABAP开发技术总结]OPEN SQL

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  9. poj 1064 (二分+控制精度) && hdu 1551

    链接:http://poj.org/problem?id=1064 Cable master Time Limit: 1000MS   Memory Limit: 10000K Total Submi ...

  10. 微博传播数量和传播深度的预测--基于pyspark和某个回归算法

    8-28决定参加一下这个千万条的数据处理任务,因为场景和自己做过的一个回归分析预测差不多,第一天开始在小规模的数据上做准备工作. 第二次大修改版本 date 20160829 星期一¶ 原始数据处理, ...