当前位置:首页 > 科技  > 软件

消费者太多!RocketMQ又炸了!

来源: 责编: 时间:2024-01-24 17:29:25 334观看
导读1、问题现象先说明下RocketMQ版本, 4.6.0的老版本了。线下环境客户端启动会频繁报错响应超时,导致consumer实例化失败,无法启动应用。图片2、排查确认线下环境RocketMQ集群流量、生产消费数量无异常。集群gc次数不多,但是

1、问题现象

先说明下RocketMQ版本, 4.6.0的老版本了。7B528资讯网——每日最新资讯28at.com

线下环境客户端启动会频繁报错响应超时,导致consumer实例化失败,无法启动应用。7B528资讯网——每日最新资讯28at.com

图片图片7B528资讯网——每日最新资讯28at.com

2、排查

确认线下环境RocketMQ集群流量、生产消费数量无异常。7B528资讯网——每日最新资讯28at.com

集群gc次数不多,但是耗时高。(原本监控看板异常数据缺失,所以少了前面一段)7B528资讯网——每日最新资讯28at.com

图片图片7B528资讯网——每日最新资讯28at.com

master节点cpu使用率、load极高。7B528资讯网——每日最新资讯28at.com

图片图片7B528资讯网——每日最新资讯28at.com

升配,4c8g升级8c32g,扩大jvm内存。7B528资讯网——每日最新资讯28at.com

系统指标略有下降,但是客户端异常没有明显改善。7B528资讯网——每日最新资讯28at.com

只能进一步排查根因,还得上arthas。7B528资讯网——每日最新资讯28at.com

thread -n 3

查看cpu高的线程在做什么。7B528资讯网——每日最新资讯28at.com

发现两个异常线程。7B528资讯网——每日最新资讯28at.com

1)一个线程在执行AdminBrokerProcessor.queryTopicConsumerByWho()。7B528资讯网——每日最新资讯28at.com

图片图片7B528资讯网——每日最新资讯28at.com

这个是查询Topic的conusmerGroup信息。7B528资讯网——每日最新资讯28at.com

比较奇怪的是,这个请求很频繁,后来发现是控制台应用dashboard有个定时任务,30s查询一次。7B528资讯网——每日最新资讯28at.com

这个请求的耗时主要是在数组的遍历处理上,说明内存中的数据非常大。7B528资讯网——每日最新资讯28at.com

图片图片7B528资讯网——每日最新资讯28at.com

而这个源码中的offsetTable,就是RocketMQ中保存consumerGroup位点信息的对象。它的key是topic@group拼接的。7B528资讯网——每日最新资讯28at.com

图片图片7B528资讯网——每日最新资讯28at.com

先临时处理,把dashboard应用关闭了,减少请求。但是效果并不明显。7B528资讯网——每日最新资讯28at.com

2)另一个线程在执行定时任务ConsumerOffsetManager.persist()。7B528资讯网——每日最新资讯28at.com

(线程调用信息忘记截图了)7B528资讯网——每日最新资讯28at.com

这个是RocketMQ集群持久化consumerGroup的offset信息的定时任务。7B528资讯网——每日最新资讯28at.com

图片图片7B528资讯网——每日最新资讯28at.com

会将整个内存对象转化为jsonString写入磁盘文件中。7B528资讯网——每日最新资讯28at.com

这个内存对象就是前面提到的offsetTable,就是RocketMQ中保存consumerGroup位点信息的对象。7B528资讯网——每日最新资讯28at.com

这里消耗资源多,还是说明我们的内存对象非常大。7B528资讯网——每日最新资讯28at.com

因为是线下环境,可靠性要求不高。所以先临时处理,把定时任务默认配置5s改成50s,减少持久化次数。7B528资讯网——每日最新资讯28at.com

效果显著,机器cpu、负载都明显改善。7B528资讯网——每日最新资讯28at.com

好了,现在问题的矛头都指向了这个offsetTable,那它到底有多大,为什么这么大?7B528资讯网——每日最新资讯28at.com

3、定位根因

3.1 直接原因

大对象的定位,一般来说需要dump看看,不过这个对象有点特殊,刚刚也提到了它会被持久化到文件中,所以直接看文件大小和内容就行了。7B528资讯网——每日最新资讯28at.com

持久化文件的配置路径,可以看下启动的conf.properties7B528资讯网——每日最新资讯28at.com

storePathRootDir=/usr/local/rocketmq/store1storePathCommitLog=/usr/local/rocketmq/store1/commitlogstorePathConsumerQueue=/usr/local/rocketmq/store1/consumequeuestorePathIndex=/usr/local/rocketmq/store1/index

在/usr/local/rocketmq/store1目录下找到config文件夹的consummerOffset.json文件,44M,amazing~7B528资讯网——每日最新资讯28at.com

对一个几十M的对象频繁序列化和持久化,加上内网磁盘比较差,难怪负载如此高。7B528资讯网——每日最新资讯28at.com

图片图片7B528资讯网——每日最新资讯28at.com

(这里截图是当时应急时备份的文件,新的文件目前是414K)7B528资讯网——每日最新资讯28at.com

3.2 根本原因

为什么这个内存对象这么大呢?7B528资讯网——每日最新资讯28at.com

查看了下文件内容,是RocketMQ中保存consumerGroup位点信息的对象,它的key是topic@group拼接的。7B528资讯网——每日最新资讯28at.com

我们发现大量奇怪的consumerGroup name,跟一个topic联合产生了几千个key。7B528资讯网——每日最新资讯28at.com

查看了下内部封装的客户端代码,找到了罪魁祸首。7B528资讯网——每日最新资讯28at.com

图片图片7B528资讯网——每日最新资讯28at.com

线下环境会根据小环境(比如自己起的测试、单测环境、CI测试环境等)拼接一个独立的consumerGroup name。7B528资讯网——每日最新资讯28at.com

在线下,每次CI的测试环境名字会变化,所以导致consumerGroup name数量急剧膨胀。7B528资讯网——每日最新资讯28at.com

4、优化

问题找到了,直接的解决方式是删除文件中无用的consumerGroup name,重启broker进行加载。7B528资讯网——每日最新资讯28at.com

由于是线下环境,不需要担心位点丢失的问题,同时当客户端请求时会自动创建新的位点信息,所以可以考虑直接删除。7B528资讯网——每日最新资讯28at.com

图片图片7B528资讯网——每日最新资讯28at.com

先停止broker进程(否则会自动落盘内存数据,创建新的文件),然后重命名相关文件(用于备份回滚),重新启动broker进程,读取空文件加载空对象。7B528资讯网——每日最新资讯28at.com

重启后,各个客户端在请求集群时,会自动创建订阅关系和消费位点记录,负载略有升高,然后就恢复到较低的负载水位了。7B528资讯网——每日最新资讯28at.com

24h的监控显示,优化效果显著,整个机器负载降低,请求读写耗时也显著降低。7B528资讯网——每日最新资讯28at.com

图片图片7B528资讯网——每日最新资讯28at.com

注意:保存订阅关系的subscriptionGroup.json也存在同样consumerGroup过多导致膨胀的问题,同样的原因和优化方式。默认订阅关系也是会自动创建的。这里就不展开赘述了。7B528资讯网——每日最新资讯28at.com

5、扩展一下

如果类似的问题出在线上怎么办?7B528资讯网——每日最新资讯28at.com

事后来看,类似问题是能够提前避免的,主要考虑两个措施:7B528资讯网——每日最新资讯28at.com

  • 要做好持久化文件(对应内存对象)大小监控,避免出现内存大对象。如果发现异常增长,必须提前排查处理。
  • 磁盘要足够好,使用SSD是基本要求,避免频繁刷盘导致负载升高。

本文链接:http://www.28at.com/showinfo-26-67353-0.html消费者太多!RocketMQ又炸了!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 太失望了!前端社区对 React 的抱怨越来越多...

下一篇: 每个开发人员都应该阅读的九篇非凡文献

标签:
  • 热门焦点
  • 6月安卓手机性能榜:vivo/iQOO霸占旗舰排行榜前三

    2023年上半年已经正式过去了,我们也迎来了安兔兔V10版本,在新的骁龙8Gen3和天玑9300发布之前,性能榜的榜单大体会以骁龙8Gen2和天玑9200+为主,至于那颗3.36GHz的骁龙8Gen2领先
  • 一年经验在二线城市面试后端的经验分享

    忠告这篇文章只适合2年内工作经验、甚至没有工作经验的朋友阅读。如果你是2年以上工作经验,请果断划走,对你没啥帮助~主人公这篇文章内容来自 「升职加薪」星球星友 的投稿,坐
  • 不容错过的MSBuild技巧,必备用法详解和实践指南

    一、MSBuild简介MSBuild是一种基于XML的构建引擎,用于在.NET Framework和.NET Core应用程序中自动化构建过程。它是Visual Studio的构建引擎,可在命令行或其他构建工具中使用
  • 一文搞定Java NIO,以及各种奇葩流

    大家好,我是哪吒。很多朋友问我,如何才能学好IO流,对各种流的概念,云里雾里的,不求甚解。用到的时候,现百度,功能虽然实现了,但是为什么用这个?不知道。更别说效率问题了~下次再遇到,
  • “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • 一条抖音4亿人围观 ! 这家MCN比无忧传媒还野

    作者:Hiu 来源:互联网品牌官01 擦边少女空降热搜,幕后推手曝光被网友誉为“纯欲天花板”的女网红井川里予,近期因为一组哥特风照片登上热搜,引发了一场互联网世界关于
  • ESG的面子与里子

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之三伏大幕拉起,各地高温预警不绝,但处于厄尔尼诺大“烤”之下的除了众生,还有各大企业发布的ESG报告。ESG是“环境保
  • iQOO Neo8 Pro抢先上架:首发天玑9200+ 安卓性能之王

    经过了一段时间的密集爆料,昨日iQOO官方如期对外宣布:将于5月23日推出全新的iQOO Neo8系列新品,官方称这是一款拥有旗舰级性能调校的作品。随着发布时
  • 苹果MacBook Pro 2021测试:仍不支持平滑滚动

    据10月30日9to5 Mac 消息报道,苹果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后获得了不错的评价,亮点包括行业领先的性能,令人印象深刻的电池续航,精美丰
Top