版权声明:本文由王亮原创文章,转载请注明出处: 
文章原文链接: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. Annotation实战【自定义AbstractProcessor】

    前言 在使用Java的过程中,每个开发人员都接触过@Override, @Deprecated等等各式各样的注解,这些东西是java最基础的一些原生定义好的annotation.本文通过一个实例演示如 ...

  2. [美]莫提默 J. 艾德勒《如何阅读一本书》

      我最近在阅读一本书,这本书的书名叫<如何阅读一本书>(商务出版社,2015),顾名思义.   作者认为,阅读是一件跟写书一样复杂的活动,而许多人并不会阅读. 看过后,你可能会有“我真没 ...

  3. okhttp3教程(1)如何引入库

    官网: https://github.com/square/okhttp https://github.com/square/okio 1,使用okhttp3需要两个库 在build.gradle c ...

  4. stm32工程模板的创建

    创建完成后 STM32F10X_HD,USE_STDPERIPH_DRIVER, 以及包含头文件

  5. VirtualBox下Ubuntu利用桥接方式上网

    1.打开virtualbox,选择[设置]-[网络]将连接方式改为[Bridged Adapter] 2.在Ubuntu中, 运行sudo gedit /etc/network/interfaces ...

  6. iOS开发Extra系列:NSString***

    在iOS系统,NSString可能是最常用的对象,很多用法跟其他语言不一样. 字符串对象NSString 使用格式创建字符串 1 2 3 4 5 + (id)stringWithFormat:(NSS ...

  7. <转>离婚前夜悟出的三件事

    文/铁眼(简书作者)原文链接:http://www.jianshu.com/p/832be4f659a0?utm_campaign=hugo&utm_medium=reader_share&a ...

  8. 通过数据库和EasyUI的combobox级联实现省市区三级联动

    1.新建一个web项目 2.因为这里用到了数据库所以我们在lib目录导入Hibernate的jar包.fastjson.jar包及数据库jar包 3.同样导入EasyUI的组件配置,并在新建的html ...

  9. Spring AOP和AspectJ支持

    学了Spring之后发现我都不知道java为何物-- 在这一章中有好几节,讲的切面编程 第一节:在项目中启用Spring的AspectJ注解支持 第二节:用AspectJ注解声明aspect 第三节: ...

  10. install Matlab2016b on Ubuntu 14.04

    From Download Download the install file from Download MATLAB, Simulink, Stateflow, and Other MathWor ...