由定时脚本错误以及Elasticsearch配置错误引发的Flink线上事故
近期接手离职同事项目,突然遇到线上事故,Flink
无法正常聚合数据生成指标.
以下是详细的排查过程:
问题复现
清晨,运维报告Flink
数据分析模块无法正常生成指标数据.
赶紧登陆Flink
所在机器,使用如下语句简单查看Job
状态.
./bin/flink list
查看输出,发现故障Job
在Running
状态.
因为数据分析模块运行时间较久,近期没有更新过,因此怀疑是依赖的中间件问题.
问题根源定位
(1) 查看数据源
数据分析模块依赖于Kafka
,因此登陆Kafka
所在机器,查看相应topic
的消费情况.
./bin/kafka-consumer-groups.sh --describe --bootstrap-server 192.*.*.*:9092 --group data_prod_consumer
得到结果如下所示:
TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
qq_data 0 340155122 340155407 285 - - -
多次运行命令(间隔一段时间),发现LOG-END-OFFSET
的增长速度远大于CURRENT-OFFSET
,导致LAG
指标不断上升,最高时达到17000
.
让同事紧急修改日志输出,屏蔽非核心业务的日志,然而作用不大,LAG
仍然在缓慢的持续增长.
LOG-END-OFFSET
意为当前最新数据偏移量,CURRENT-OFFSET
意为当前消费者消费的偏移量,LAG
为LOG-END-OFFSET
与CURRENT-OFFSET
之间的差值.
通过LAG
数值,可以观察到topic
的消费情况,从而确定是否有数据积累.
观察flink
机器负载,发现负载较低,消费瓶颈不应该是Flink
.
(2) 查看数据输出
数据分析模块的Sink
是Elasticsearch
(单节点运行),因此查看ES
的运行状况.
curl 'localhost:9200/_cat/indices?v'
查数据分析模块输出的数据库,发现数据库大小正常,感觉疑惑.
使用top
查看机器的负载信息,大吃一惊:
由上图可知,ES
应用的虚拟内存(VIRY
)占用高达28G,此外,机器的load average
高达4.43.
基本上,可以确定是Elasticsearch
异常引发数据分析模块运行异常.
重新查看ES
索引信息,发现有四个Type
数据量不对(非相关业务数据表),其中一张表的数据量多达2800万条(此业务有过了解).
询问离职同事,经过询问大致可确定这四张表的数据量不对,此表数据未设置TTL
,而是依赖于数据库定时删除脚本完成过期数据删除操作.
(3) 确定问题
查看数据库定期删除脚本执行日志,发现脚本在较长的一段时间内未能正常运行.
原因是脚本在这执行删除操作时,未根据业务的变更而修改脚本,导致在删除已废弃表中数据时出现异常而终止运行.
因为当前故障业务的数据库删除命令在异常前,故当前业务的数据量维持在正常的水平线上.
ps -ef|grep elasticsearch
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64/jre/bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+AlwaysPreTouch -server -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -XX:+HeapDumpOnOutOfMemoryError -Des.path.home=/home/app/elasticsearch-6.1.2 -Des.path.conf=/home/app/elasticsearch-6.1.2/config -cp /home/app/elasticsearch-6.1.2/lib/* org.elasticsearch.bootstrap.Elasticsearch -d
此外,查看Elasticsearch
的运行信息时,发现其配置明显存在不足,Xms
分配为1G,Xmx
分配为1G.
然而当前机器仅运行Elasticsearch
,因此暂停依赖于Elasticsearch
的相应业务,调整配置信息,重新启动.
ps -ef|grep elasticsearch
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64/jre/bin/java -Xms8g -Xmx8g -XX:+UseG1GC -XX:MaxGCPauseMillis=50 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+ParallelRefProcEnabled -XX:+AlwaysPreTouch -server -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -XX:+HeapDumpOnOutOfMemoryError -Des.path.home=/home/app/elasticsearch-6.1.2 -Des.path.conf=/home/app/elasticsearch-6.1.2/config -cp /home/app/elasticsearch-6.1.2/lib/* org.elasticsearch.bootstrap.Elasticsearch -d
修改后,Xms
以及Xmx
响应调整为8G,按照Elasticsearch
推荐配置,保留8G内存供系统使用.
此外,临时修改数据库脚本并执行,删除各表中的过期数据.
curl -XPOST "http://localhost:9200/data/_delete_by_query?conflicts=proceed" --header 'Content-Type:application/json' -d @delete_data_condition.txt
使用上述语句删除过期数据,删除条件置于delete_data_condition.txt
文件中.
需要注意,因为Elasticsearch
版本控制的原因,容易导致数据删除失败,因此添加conflicts=proceed
条件解决版本冲突导致的数据删除失败.
问题解决
经过上述操作后,发现Elasticsearch
数据库的负载明显下降,观察Topic
的消费情况,发现LAG
指标在快速回落.
待观察一段时间后,发现数据分析模块能够正常聚合,业务恢复正常.
不过还是留下了问题,就是因为Elasticsearch
导致Flink
消费Kafka
数据过慢,出现了重复读
进一步拖慢聚合速度,这个问题需要后续深入研究解决.
这就是一个删除脚本异常引起的血案,中间件虽然带来了极大的便利,但是也提升了问题排查的难度.
因此,不仅要知道中间件怎样部署,更要学会如何部署更优,为业务的正常运行奠定基础.
PS:
如果您觉得我的文章对您有帮助,请关注我的微信公众号,谢谢!
由定时脚本错误以及Elasticsearch配置错误引发的Flink线上事故的更多相关文章
- Druid连接池参数maxWait配置错误引发的问题
Druid连接池参数maxWait配置错误引发的问题 1. 背景 数据库服务器(服务部署在客户内网环境)的运行一段时间后,网卡出现了问题,导致所有服务都连接不上数据库,客户把网络恢复之后,反馈有个服务 ...
- Vue 2.x 3.x 配置项目开发环境跟线上环境
先找到package.json (这是nuxt版的vue 可能会跟一般vue不一样 当然总体上差不多的) "scripts": { "dev": " ...
- 记一次真实的线上事故:一个update引发的惨案!
目录 前言 项目背景介绍 要命的update 结语 前言 从事互联网开发这几年,参与了许多项目的架构分析,数据库设计,改过的bug不计其数,写过的sql数以万计,从未出现重大纰漏,但常在河边走,哪 ...
- Elasticsearch常见错误与配置简介
一.常见错误 1.1 root用户启动elasticsearch报错 Elasticsearch为了安全考虑,不让使用root启动,解决方法新建一个用户,用此用户进行相关的操作.如果你用root启动, ...
- java dump 内存分析 elasticsearch Bulk异常引发的Elasticsearch内存泄漏
Bulk异常引发的Elasticsearch内存泄漏 2018年8月24日更新: 今天放出的6.4版修复了这个问题. 前天公司度假部门一个线上ElasticSearch集群发出报警,有Data Nod ...
- elasticsearch配置详解
一.说明 使用的是新版本5.1,直接从官网下载rpm包进行安装,https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5 ...
- Spring-boot2.0.1.BUILD-SNAPSHOT整合Elasticsearch报failed to load elasticsearch nodes错误解决办法
spring-boot整合es的application.properties的默认配置为: spring.data.elasticsearch.cluster-nodes=localhost:9200 ...
- elasticsearch启动错误整理
一.elasticsearch错误复现 (一).环境 配置环境 OS:CentOS 7.4 64bit elasticsearch版本: - ip:10.18.43.170 java版本:java - ...
- Tomcat启动报错org.springframework.web.context.ContextLoaderListener类配置错误——SHH框架
SHH框架工程,Tomcat启动报错org.springframework.web.context.ContextLoaderListener类配置错误 1.查看配置文件web.xml中是否配置.or ...
随机推荐
- 甲方安全之安卓App第三方加固对比
前段时间公司要给 Android 应用进行加固,由笔者来选一家加固产品.然后发现,加固产品何其之多,且鱼龙混杂.各种问题也是层出不穷,比如,有些加固时间非常久.有些加固会失败.有些运行会崩溃等等问题. ...
- numpy中array和matrix的区别
两者相似但执行相同的运算可能得到不同的结果 显然,array只能通过dot()实现"矩阵乘法",array的"*"运算实现的是两个纬度相同的"矩阵&q ...
- Django出错提示TemplateDoesNotExist at /
Issue: 打开login URL的时候报错如下: Action: 在setting.py中修改DIRS,模板文件目录 TEMPLATES = [ { 'BACKEND': 'django.temp ...
- MATLAB最大均值差异(Maximum Mean Discrepancy)
MATLAB最大均值差异(Maximum Mean Discrepancy) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 更多内容,请看标签:MAT ...
- MySQL的事务隔离
提到事务,你肯定会想到ACID(Atomicity.Consistency.Isolation.Durability,即原子性.一致性.隔离性.持久性),今天我们就来说说其中I,也就是“隔离性”. 数 ...
- 原生JS无缝轮播图
(1)原理介绍 (2)静态布局 <!DOCTYPE html> <html> <head> <meta charset="utf-8"&g ...
- Day11 - Python基础11 模块学习——optparse
Python 有两个内建的模块用于处理命令行参数: 一个是 getopt,<Deep in python>一书中也有提到,只能简单处理 命令行参数: 另一个是 optparse,它功能强大 ...
- win7+vim搭建+verilog HDL IDE
参考地址:http://www.huangdc.com/421 参考文章为2016年,部分更新贴于文章内了 安装下载vim vim在win下叫gvim,下载地址:https://www.vim.org ...
- <Topological Sort> ( 高频, hard) 269
. Alien Dictionary 这些就是有向图的边,对于有向图中的每个结点,计算其入度,然后从入度为0的结点开始 BFS 遍历这个有向图,然后将遍历路径保存下来返回即可.下面来看具体的做法: 根 ...
- Note | 常用指令,工具,教程和经验笔记
目录 图像处理 机器学习和数学 编程环境和工具 写作工具 其他 图像处理 获取图像频域并分解为高低频:https://www.cnblogs.com/RyanXing/p/11630493.html ...