当前位置: 首页 > article >正文

线上异步任务突然不能回写100%

项目场景:

       需求是一个作业,需要运行一组sql,所有sql运行完成,更新作业进度为100%,状态为完成。sql需要是在大数据平台,通过yarn调度,异步执行。 kafka监听每个sql的执行状态,所有sql执行完成,更新作业进度和状态。系统运行一段时间之后,突然频繁出现作业进度不能更新到100%。

       这个系统部署了多个项目现场,稳定运行多年。出问题的这个项目也已经运行2年,突然出现了问题。同时运行10个作业,每个作业有50多个sql,有些作业可以回写状态100%,有些不能。任务不能正确回写到进度100%,比较随机。

  目前的实现 方案:有一个任务表rwxx(id,zt.......),  一个字表rwxx_xq(id,rw_id,sql_id,sql,zt,.....),  rwxx_xq表记录每个sql以及sql的状态。每个sql执行完成之后,会回写更新rwxx_xq的zt信息。统计rwxx_xq表这个rw_id状态都是完成状态,更新rwxx状态为完成,进度为100%


原因分析:

1、怀疑项目现场环境

功能稳定运行了2年多,突然出问题,第一反应是不是项目现场环境问题,如磁盘空间不足,服务器内存不够,mysql服务器空间等等问题。排除一圈,发现现场环境稳定,平台别的功能正常,就我们子平台异常。

2、怀疑sql没有执行完成

     子平台服务器、mysql等服务器排除之后,想着任务都会提交到yarn执行。所以去yarn上,查询这个任务对应的多个子sql,是不是任务运行完成。  结果那作业id,去yarn上查询,发现任务下面的sql都已经执行完成。

3、怀疑kafka消息没有发送或者没有接收

     sql都执行完成了,但是rwxx_xq表没有更新状态。怀疑是不是执行完成之后,大数据平台没有成功给子平台发送kafka消息,或者发送了kafka消息,子平台没有接收到。

    通过查询kafka,发现大数据平台正常发送了kafka消息,通过查询自己的日志,发现确实收到了kafka消息。

4、日志分析,代码分析

  通过以上3步,基本判断环境没什么问题。就只能再审查相关的代码。说实话,因为多个项目正常运行多年的滤镜,是一点也不觉得代码有问题。

  1、去线上服务器,down下了最近2天的运行日志,因为是kafka异步消息,当时做需求的时候,出于谨慎,收到消息都会打印日志。每运行一步,可能出错的地方都打印了日志。 因为是多服务器,运行又是多线程,看日志也非常复杂。

 2、 通过日志,发现没更新rwxx_xq表的原因,居然是通过sql_id、和rw_id居然没在rwxx_xq表找到数据,所以跳过,没往下更新状态。

问题虽然定位到了,但是就很诡异,因为在rwxx_xq表有记录。然后就想着,难道是mysql部署了多台,数据不同步??

  结果现场就一台mysql服务器。

问题又陷入困顿,不知道问题在哪里了。  求助组内同学,大家一起头脑风暴。有个同事说,现在实现方案是

1、目前是先组装sql数据,提交任务给大数据平台执行。 大数据有定时任务,10秒去redis拉sql执行。

  2、把sql任务写rwxx_xq表。

  3、监听kafka,回写更新rwxx_xq表

他说怀疑是提交大数据平台,sql很快执行成功,rwxx_xq表还有没写数据,导致了问题。顺着他的思路,比对了rwxx_xq表数据创建时间和kafka消息回写时间,确实是这个问题。

分析问题根因:

   正常情况步骤1调接口成功之后,至少10秒+sql执行的时间,可能是20秒左右,数据才会开始回写。如果sql任务写到rwxx_xq表时间小于20秒,都不会出现问题。

   但是项目现场运行多年,rwxx_xq累积到百万数据。往rwxx_xq一条条插入数据,50个数据,居然花了60秒。所以就导致了这个问题。


解决方案:

修改代码:把sql任务写rwxx_xq表,然后调大数据接口。调整上面实现方案步骤1,2的顺序。


http://www.kler.cn/a/146898.html

相关文章:

  • 【WPF】Prism库学习(一)
  • 【C++】红黑树封装map—set
  • pytorch tensor在CPU和GPU之间转换,numpy之间的转换
  • MCU的时钟体系
  • 算法日记 26-27day 贪心算法
  • c# 调用c++ 的dll 出现找不到函数入口点
  • FLASK博客系列9——你想成为我的新用户吗?
  • Node.js入门指南(五)
  • vue页面表单提交时如何做校验
  • 你了解Redis 的二进制安全吗
  • JS 单线程还是多线程,如何显示异步操作
  • Linux篇:文件系统
  • autojs-练手-批量下载JK图片
  • Windows bat批处理zip打包排除bat文件自身不打包
  • 10、静态数码管显示
  • vatee万腾的科技征途:Vatee独特探索的数字化力量
  • excel单元格内换行按什么快捷键
  • 【Spring整合Junit】Spring整合Junit介绍
  • 边缘计算网关:智能制造的“智慧大脑”
  • 【高效开发工具系列】MapStruct入门使用
  • Idea常用的快捷键
  • SpringBoot封装Elasticsearch搜索引擎实现全文检索
  • vulfocus apache-cve_2021_41773 漏洞复现
  • Hive中常出现的错误(不定时更新)
  • SpringBoot——国际化
  • 【MySQL系列】PolarDB入门使用