线上异步任务突然不能回写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.hqwc.cn/news/225558.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开源】基于JAVA的森林火灾预警系统

项目编号: S 019 ,文末获取源码。 \color{red}{项目编号:S019,文末获取源码。} 项目编号:S019,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 系统基础模块2.3 烟…

才聚免费为你招聘,用人单位看过来!

才聚团队从1998年开始从事项目管理的推广工作,20多年来培训学员超30万人次,分布全国各地、服务企业超过5000家。拥有大批 PMP (项目管理专业人员资格) NPDP(产品经理国际资格) 软考 (信息系统…

三十、elasticsearch集群

目录 一、集群的概念 1、节点 2、索引 3、分片和副本 二、集群的架构 三、集群的部署方式 1、单主节点 2、多主节点 3、安全集群 四、搭建ES集群 1、elasticsearch中集群节点有不同的职责划分 2、elasticsearch中的每个节点角色都有自己不同的职责,因此…

算法—双指针

双指针算法可以帮忙把时间复杂度降低一个维度,即原本O(n2)降为O(n);将O(n)降为O(1) 移动零 移动零 题目解析 将所有0移动到末尾保持非0元素相对顺序对数组进行原地操作(不开辟额外空间) 算法原理 数组…

抖音票务小程序开发:从零到一的全面指南

本文将深入介绍如何从零开始开发一款抖音票务小程序,为读者提供全面的指南,帮助他们实现从概念到实际应用的全过程。 第一步:理清需求与目标 在开发任何应用之前,清晰的需求和明确的目标是成功的关键。在这一阶段,你…

【前端首屏加载速度优化(0): 谷歌浏览器时间参数】

DOMContentLoaded 浏览器已经完全加载了 HTML&#xff0c;DOM树构建完成&#xff0c;但是像是 <img> 和样式表等外部资源可能并没有下载完毕。 Load DOM树构建完成后&#xff0c;继续加载 html/css 中的外部资源&#xff0c;加载完成之后&#xff0c;视为页面加载完成。…

论文绘图——局部细节放大

文章目录 前言一、绘图1.0版二、绘图2.0版三、总结 前言 我们经常在论文中会看到下面这些样式的图片&#xff1a;在图片中使用矩形框框出感兴趣的区域&#xff0c;然后在底部或者其他位置附上对应的局部放大的细节图&#xff0c;简洁好看。✨ 曾尝试使用过PPT制作&#xff0c;也…

Leetcode—907.子数组的最小值之和【中等】

2023每日刷题&#xff08;四十二&#xff09; Leetcode—907.子数组的最小值之和 算法思想 参考自y神思想 实现代码 class Solution { public:int sumSubarrayMins(vector<int>& arr) {long long ans 0;const int mod 1e97;int n arr.size();stack<int>…

怎么解决 申请获取你的手机号,但该功能使用次数已达当前小程序上限,暂时无法使用。

微信出新规了&#xff0c; 获取手机号数据需要收费&#xff0c;1分钱一条。 在以前的开发中&#xff0c;获取手机号是默认不需要收费的&#xff0c;现在收费等于微信现在作为运营商一样&#xff0c;验证一个手机短信&#xff0c;需要收费 几分钱。 如果你的程序遇到了问题&am…

GPTS-生成一个动漫图像GPT

介绍 GPTs是ChatGPT的定制版本,用户可以通过组合指令、知识和功能来定制用于特定任务或主题的GPT。它们可以根据需要简单或复杂,解决从语言学习到技术支持等各种事情。 创建GPTs Plus和Enterprise用户可以在chat.openai.com/create上开始创建GPTs。 您可以通过在ChatGPT上的…

【javaWeb】HTTP协议

HTTP (全称为 “超文本传输协议”) 是一种应用非常广泛的应用层协议 HTTP 是一个文本格式的协议. 可以通过 Chrome 开发者工具或者 Fiddler 抓包, 分析 HTTP 请求/响应的细节. 上图是通过Fiddler对访问百度搜索页时抓取的一个http协议的包。 观察抓包结果,可以看到,当前 http…