最新要闻
- 天天观察:年轻人发完红包看电影 520单日总票房超1.5亿:速激10位列第一
- 网吧用“蛤蟆”、“天鹅”区分男女厕所 网友点赞直呼有才:官方回应
- 樱桃自由了!水果贵族樱桃一斤直降30元 六七月份还会继续降
- B站CEO陈睿:年轻人爱学习 超8成985、211学生是B站用户 天天速递
- 三星独占结束!国产手机将用上“鸡血版”二代骁龙8-当前视点
- 浏阳:残疾人以“武”会友,散发的是自信和快乐-全球资讯
- 马斯克回避的赛道蔚来进军了:可控核聚变20年内商用_环球热点
- 首发联发科8200-Ultra!小米Civi 3跑分出炉|全球即时
- 新疆乌鲁木齐达坂城姑娘特色农产品展示中心预计7月投用|当前速讯
- 网约车拒违停 2乘客赖车上超24小时还原地撒尿 官方通报:行拘-新要闻
- 告别MMO手游氪金!《逆水寒》手游公测预告片发布:6月30日见
- 黄百鸣谈为何拍《叶问5》:前几部成绩好 甄子丹也想拍 天天报道
- 李荣浩沉迷《王国之泪》 吐槽吉波得女王太难:不可能有人打的过 世界速递
- 环球今亮点!荣耀:再见了,高价低配!骁龙8+芯片+IMX800仅2599元
- 老车主退10万差价业界良心!极狐阿尔法S HI先行版上市:32.98万_世界观速讯
- 微信开放520元红包:特别的爱也可以是最多1000元 世界简讯
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
Kafka未触发消费异常排查实录-全球实时
前言:
最近生产环境系统发现一个疑难杂症,看了很久的问题但是始终无法定位到问题并处理,然后查阅了相关资料也是定位不到问题,不过资料查阅却给了个新的思路,以此为跳板最终解决了问题。
一、问题描述
功能介绍:“主计划拆分子计划”是APS系统很常见的功能,功能大概意思是用户可选多个主计划一次性进行“展开子计划”生成子计划,因单个主计划生成子计划的逻辑相对复杂,所以单个计划耗时不能算低,故这里的批量操作使用了异步进行,这里使用了Kafka进行生产及消费消息。
问题起因:功能完成之后上生产系统,然而偶尔会收到客户提出少量单据卡在中间状态,导致“展开”不了的问题,前前后后查了好久也没能找到具体问题并解决。
(资料图片仅供参考)
二、问题分析
分析数据:通过查看用户提供的单据,发现这些数据都是卡在了某一个中间状态,这个状态是作为中转状态使用的,一开始计划的状态为“未展开”,点击执行“展开子计划”的功能之后,将计划标识为“展开中”之后再推送到Kafka消费处理,Kafka消费者接收到生产者的消息之后,将计划进行处理,处理完成之后再将状态标识为“展开完成”。
所以从数据上分析,问题点应该出现在消息生产到消费过程这段期间,但是纵观代码,发现已经对业务逻辑做了异常处理,如果是消息消费过程发生异常,都会将错误过程记录下来,所以再次定位到问题出现在Kafka的生产消息及消费消息这个过程。
查看日志:根据以上分析结合日志监控的方式,确定问题数据实际上并未进行消费,所以猜想有两种情况:
- Kafka根本没有生产消息成功;
- 生产消息成功,但是Kafka未Poll到需要消费的消息。
三、进展
- 加addCallback回调方法
- 生产端的kafkaTemplate对象中,封装发送消息的方法,将send()方法封装为通用方法,增加addCallback()回调方法,用于消息生产成功之后回调记录日志。以此确认生产消息是否成功.
2. 参考相关资料:
查问题过程中,看到大佬写的文章,文章里描述了造成消费不成功的问题是因为“Kafka 内存饱和”造成的,但是实际上内存饱和造成的问题是Kafka消费服务Poll消息时候超时,相应的错误信息在我们系统日志中搜不到,最终也确认不是因为改原因造成的问题。(文章下文参考)
- 【AGP网关】Kafka 异常排查实(内网文章)
记一次kafka消费者不消费,消费组被踢出问题(外网文章)
- 研究kafka消费原理
当前确认问题点应该是出现在消费端消费不了消息导致的,那么重新研究一下Kafka消费端的实现原理。
消费者是通过KafkaConsumer对象的poll方法从Kafka队列中将消息拉取出来进行消费,这个poll方法可传入poll超时时间,超过设置的时间则会报拉取超时的异常“due to consumer poll timeout has expired.”,上文中大佬出现的报错就是提示这种拉取超时的报错,超时时间可通过配置节点【max.poll.interval.ms】进行配置;
KafkaConsumer对象poll到数据之后取到ConsumerRecords对象,然后就可以对数据进行消费,直到取到的ConsumerRecords对象是空的(isEmpty()为true)才停止消费。
这里发现有一个隐患的地方,当ConsumerRecords对象取到空数据才停止消费,那么这个ConsumerRecords对象是否会取到多个数据进行消费,是如何进行消费的?!
查阅相关资料,发现Kafka的消费原理是:KafkaConsumer 对象是实时拉取消息的,但不是实时消费消息的。KafkaConsumer 在 poll() 方法中从 Kafka 集群中批量拉取数据,将多个消息封装在 ConsumerRecords 对象中返回。这些消息可以在消费者应用程序的时间间隔内处理,但poll() 方法返回的消息不是立即消费的。只有在 ConsumerRecords 中的所有消息都被处理后,才会发送下一个拉取请求。如果在处理消息时发生错误,可以根据实际需要重新处理这些消息或跳过这些消息。
反观项目代码,发现在KafkaListener监听器拉取到数据之后,项目中仅仅只是取第一条数据进行消费,这里是不是有问题呢?(参考下面代码块)
/** * 计划发布SAP-KTWKZ * * @param records * @param consumer */ @KafkaListener(topics = {KafkaTopicConst.SCHEDULE_DAY_PLAN_RELEASE_SAP_KTWKZ_TOPIC}, id = KafkaTopicConst.SCHEDULE_DAY_PLAN_RELEASE_SAP_KTWKZ_TOPIC, containerFactory = "batchFactory") public void dayPlanReleaseToSapKTWKZTopic(ConsumerRecordsrecords, Consumer consumer) { String data = ApsKafkaUtils.getFirstRecordValues(); log.info("mq消费-KT万颗子计划发布SAP数据:\n{}", data); try { SystemPostDTO systemPostDTO = JsonUtils.fromJson(data, SystemPostDTO.class); String postContent = systemPostDTO.getData(); if (StrUtil.isEmpty(postContent)) { log.warn("mq消费-KT万颗子计划发布SAP数据异常警告,systemPostDTO.data数据不能为空"); return; } pushRecordService.consumePushProductionOrderKtWKZ(postContent); } catch (Exception e) { log.error("mq消费-KT万颗子计划发布SAP数据异常:", e); } }
四、问题重现及
重现:
从第三点的分析中,暂时确定可能是ConsumerRecords对象接收到多条消息,但是消费端仅仅消费了第一条消息导致的问题,那么通过写demo来测试批量生产消息是否会导致ConsumerRecords一次性拉取到多条消息。
生产:
@ApiOperation("测试Kafka poll消息机制") @PostMapping("/v99/schedule/kafka/test") public ResponseEntitytestKafkaPollMessage( @RequestParam("testData") String testData) { String topic = "my-test-topic"; for (int i = 0; i < 100; i++) { Thread.sleep(0);//参数有0,10,100 SubassemblyOpenPlanListInfoRespDTO dto = kafkaDemo.sendMessage(testData); } return Results.success("Success"); }
消费:
@KafkaListener(topics = {"my-test-topic"}, id = "my-test-topic", containerFactory = "batchFactory") public void myTestKafka(ConsumerRecordsrecords, Consumer consumer) { List recordValues = ApsKafkaUtils.getRecordValues(); try { log.info("接收到的数据为【{}】{}", recordValues.size(), JsonUtils.toJson(recordValues)); } catch (Exception e) { log.error("接收到的数据为异常:", e); } }
以上接口,通过调用发现确实出现ConsumerRecords对象poll到多条消息的情况:
其中,for循环中执行等待时间越长,出现一个ConsumerRecords对象拉取到多条数据的情况越少:
那么分析为什么在实际使用过程中,【主计划拆分子计划】这个功能是偶然出现消费失败的问题,而不是稳定出现呢?
再次通过代码ReView的方式去回顾一下这个功能,发现当前代码中,是使用了for循环将一批次计划单循环推送给MQ进行消费,单个循环里执行了一次读库一次写库的操作,一次循环耗时大概几十毫秒,与上述demo的Thread.sleep(10)场景类似,所以基本确定偶发这种问题的原因出现在这里。
解决:
其实解决该问题很简单,只需要在消费端获取到ConsumerRecords对象之后,将拉取到的所有消息列表循环消费而不是只消费单条消息即可,之前的仅消费单条消息的场景经过沟通确认只存在某些特殊场景才需要使用,暂时不再保证该种场景。
五、总结
本案例中,通过日志、业务场景、写Demo使用并发工具等方式来分析及重现问题,将一个生产上的疑难杂症处理掉,其中也通过参考大佬的文章,虽然问题描述和大佬描述的基本一致,也和网络上的Blog描述一致,但是产生的问题却并不一样。
总的来说,其实解决问题不难,重要的是要了解问题,了解原理以及了解到解决问题的步骤,建议从多个方面一起查看问题。从其他参考文章描述中,可以从业务、日志、内存环境等查看问题,我这里补充一点,也可以多多结合业务来适当写demo去测试问题,可能也会有意外收获。
其他
大家有没有遇到其他的生产上的疑难杂症呢,大家都是怎么遇到问题,最后怎么解决问题呢,这里大家不妨进行讨论,也可以列出多多的跟进方案或者工具,大家一起学习进步。
关键词:
-
基于python实现-根据Excel表格指定的UniqueKey的顺序-到另一个参考表格中查找-补全与自己相关的数据
今天笔者在整理一份数据时,有这样一个需求,已知有多个ID是UniqueKey,每一个UniqueKey及与它相关的数据为
来源: Kafka未触发消费异常排查实录-全球实时
基于python实现-根据Excel表格指定的UniqueKey的顺序-到另一个参考表格中查找-补全与自己相关的数据
Revit二次开发实战
天天观察:年轻人发完红包看电影 520单日总票房超1.5亿:速激10位列第一
网吧用“蛤蟆”、“天鹅”区分男女厕所 网友点赞直呼有才:官方回应
樱桃自由了!水果贵族樱桃一斤直降30元 六七月份还会继续降
B站CEO陈睿:年轻人爱学习 超8成985、211学生是B站用户 天天速递
三星独占结束!国产手机将用上“鸡血版”二代骁龙8-当前视点
浏阳:残疾人以“武”会友,散发的是自信和快乐-全球资讯
OPEN AI角色插件通道开放接入支持各种细分领域对话场角色景模型一键接入AI 智能 聚焦
记录--Vue中如何导出excel表格
马斯克回避的赛道蔚来进军了:可控核聚变20年内商用_环球热点
首发联发科8200-Ultra!小米Civi 3跑分出炉|全球即时
新疆乌鲁木齐达坂城姑娘特色农产品展示中心预计7月投用|当前速讯
网约车拒违停 2乘客赖车上超24小时还原地撒尿 官方通报:行拘-新要闻
告别MMO手游氪金!《逆水寒》手游公测预告片发布:6月30日见
黄百鸣谈为何拍《叶问5》:前几部成绩好 甄子丹也想拍 天天报道
李荣浩沉迷《王国之泪》 吐槽吉波得女王太难:不可能有人打的过 世界速递
环球快看:Revit二次开发 知识点总结(表格)
环球今亮点!荣耀:再见了,高价低配!骁龙8+芯片+IMX800仅2599元
老车主退10万差价业界良心!极狐阿尔法S HI先行版上市:32.98万_世界观速讯
微信开放520元红包:特别的爱也可以是最多1000元 世界简讯
当前要闻:synopsys dw_axi_dmac 使用集成经验
直播源码技术控制直播稳定之消息篇
全新一代华为海思芯片V811首发!七大绝技 支持8K30Hz解码-每日简讯
明道回应与蒋雯丽拍戏争议 姐弟恋新剧《转角之恋》口碑翻车:网友直呼辣眼|当前关注
焦点消息!安徽大别山区和沿江江南部分地区将有大雨到暴雨
当前简讯:4K分辨率搭配全玻璃镜头!当贝F6投影仪发布:新一代海思V811芯片 支持8K解码
网易1.5折甩卖暴雪“分手遗产” 有人狂抢4箱转卖:暴雪国服仍没人接_当前热点
拉脱维亚第20届“汉语桥”中文比赛落下帷幕
组件化编程
速看:使用ln命令在Linux系统中创建连接文件
当前观点:400元档性能天花板!当贝盒子H3S发布:8K HDR、3+32GB存储
华为等怎么看?报告称5G网放缓 运营商赔本减少投入:4G更成熟 最新快讯
浦城县气象台发布雷电黄色预警信号【2023-05-20】
《变形金刚:超能勇士崛起》宣布,说唱歌手GAI周延为说唱盟友
AMD、NV开打价格战!RX 7600售价曝光:或跟RTX 4060同价甚至更低
当前视点!究竟是噱头还是体验升级?18GB大内存手机实测体验
今天520:微信已开放520元大红包 限时一天 新消息
吸塑是什么材质(吸塑是什么材质)
5/19组讯 | 古装虐恋剧《婉婉如梦霄》、电影《高危漏洞》先导片、院线电影《心鼓》等
清除ExecutionContext,阻止 AsyncLocal 在异步流、Thread中传递
焦点快播:vulnhub靶场搭建
每日速看!剧版《1818黄金眼》开机!网友:谁演紫金陈
华为Mate X3为何能做到极致轻薄还可靠?张朝阳物理课揭秘真相|天天关注
买新三级能效空调的人为什么多了?原因揭开_当前视点
新动态:电池放两周就报废!电车真就这么娇贵?真的
电脑微信占用100多GB空间 解决办法来了:重回清爽流畅
世人谓我恋长安其实只恋长安某_红衣佳人白衣友 朝与同歌暮与酒 世人谓我恋长安 其实只恋长安某|环球观焦点
黑枸杞食用方法视频 黑枸杞食用方法|消息
欧洲奇树的皮长到15厘米厚 被吉尼斯列为世界上最大与最古老纪念碑
报告称有100多万建筑的纽约正在下沉 自由女神像将半淹没在海水中
《王者荣耀》520皮肤正式开卖 亚瑟-追逃游戏皮肤首周价格为1430点券
端午节三天假期后将连上6天班 多数网友计划出行
福建省发现整窝恐龙蛋及零星恐龙蛋壳碎片 为长形蛋类
环球关注:华利集团接待高毅资产等多家机构调研
《漫长的季节》荣登近5年来评分最高电视剧 导演称看到分数后落泪
北京将遭雷雨大风沙尘轮番袭击 伴有短时强降水和冰雹等
日本北海道一老人在野外湖边钓鱼 被棕熊残忍吃掉
数据显示87%的打工人第一份工作月薪不超过一万 更注重个人发展
雅万高铁实现全线接触网送电 为高铁列车运行提供动能
文心一言 VS 讯飞星火 VS chatgpt (18)-- 算法导论4.1 5题-全球速看
SLAM建图导航信息(仿真)
苹果混合现实设备下月发!光成本就过万了 苹果贴本卖-全球聚焦
每日速递:微软690亿美元收购暴雪又一个障碍扫除 魔兽国服重开有望了?
当前速读:乔迪:浙江队下半场展现风格追平比分 我们还是要找回自信
资讯推荐:3天假期后需连上6天班 端午节出行预定开始了:机票酒店搜索大增
医学生喷《后浪》剧情喷上热搜 官微回应称请拭目以待
每日观察!创远信科接待开源证券股份有限公司等多家机构调研
平板App适配稳了!OPPO、小米等联合通知:App开发者应适配大屏
通用汽车在美召回约66.8万辆汽车 因一部件“涂粉”厚了 环球速看料
蔚来汽车进军可控核聚变 20年内能把聚变商业化?|全球今热点
特斯拉的“营销预算”还真不少 只是没算到账上
10核i7+32GB+双2.5G网口 雷神mini主机到手2999_世界热闻
History(历史)命令用法15例-天天关注
当日快讯:离岸人民币短线拉升涨超100点
天天消息!送走马斯克等于利好?全球最大广告买家摘掉推特“风险”帽
SSD刚想涨价 主控一哥慧荣泼下凉水:最高降价50%去库存
视讯!消息称格力解散手机核心团队 或不再出手机新品:官网已打不开
当前快播:喜大普奔 iPhone可以同步Windows11了
焦点速讯:私家车辆坠河情况紧急!众人义无反顾跳河救人:大赞
iOS视频播放常用重点知识_资讯
国网江苏超高压公司研发应用二次电缆识别仪
中金普洛斯REIT扩募获基金份额持有人大会表决通过 首批REITs扩募再进一步
海外网友热议JDG击败T1:Faker打的太烂 该退役了|全球新资讯
天天看热讯:夏天别急着开空调!这几项准备工作别忘了
全球报道:在美国没有未来!自动驾驶卡车独角兽大裁员:重心将回归国内
RTX 4080与RTX 4090同跑《赛博朋克2077》差距有多大?
天天观速讯丨不止用来玩游戏!知名商用渲染器D5获DLSS 3加持
大源西超百亩地块拍出,6月金融城三期首迎住宅供地!-全球微头条
多态、虚函数表、底层实现、多重继承的问题及处理
天天动态:记录--axios和loading不得不说的故事
MySQL 处理重复数据|全球新视野
登录appuploader
天天热头条丨分享一下mybatisPlus新代码生成器3.5.1以上
【金融街发布】人民银行、外汇局:北京、广东、深圳试点优化跨国公司本外币跨境资金集中运营管理政策 天天视讯
每日精选:北京:近期呼吸道合胞病毒感染患儿激增,儿童出现呼吸困难应立即就医
用了十几年智能机 终于弄懂了手机掉电快原因_每日动态
焦点信息:真是老天爷赏饭吃:女孩特爱哭 被送去唱戏拿了金奖
绿源、五星钻豹等电动车这些批次抽查不合格:车速提示音、整车质量没过关|今日热文