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

rocketmq做了哪些事情来提高性能

在中间件和消息队列的领域内,Apache RocketMQ是一个高性能、高吞吐量的分布式消息中间件,它被广泛应用于处理大规模消息服务的构建中。为了达到这样的性能标准,RocketMQ不仅在架构设计上进行了优化,还在代码层面进行了大量的重构和重写,以提升其处理速度和降低资源消耗。以下是具体分析:

1. **系统级别的调整**

- **最大文件数限制**: 在操作系统级别,RocketMQ通过修改`/etc/security/limits.conf`来增加单个用户可以打开的最大文件数,这对于处理大量并发连接和文件操作至关重要Θic-2Θ。

- **系统参数调优**: 通过调整如`vm.max_map_count`等内核参数,RocketMQ能够更有效地管理内存和资源使用,这有助于提高系统的整体稳定性和性能Θic-2Θ。

2. **JVM配置优化**

- **堆外内存设置**: 开启堆外内存设置(`transientStorePoolEnable=true`),使得消息写入到堆外内存,消费时从pageCache消费,实现读写分离,显著提升了集群性能Θic-2Θ。

- **异步刷盘机制**: 开启异步刷盘(`flushDiskType=ASYNC_FLUSH`),相较于同步刷盘,异步刷盘可以显著提升TPS,更好地满足业务需求Θic-2Θ。

3. **代码级别的优化**

- **MessageDecoder类的重写**: 在解析消息属性时,RocketMQ优化了`MessageDecoder`类,减少了对象的创建和数组复制次数,从而显著提高了性能Θic-4Θ。

- **消除不必要的锁**: 通过减少重量级锁的使用并引入自旋锁,特别是在主从复制和数据写入过程中,RocketMQ降低了线程竞争的开销,提高了多线程处理的效率Θic-3Θ。

- **优化内存映射**: 利用mmap优化CommitLog文件的操作,减少了内存拷贝的开销,尤其是在主从复制的过程中,有效减少了不必要的内存复制Θic-3Θ。

- **特定场景的优化**: 对于小消息的生产性能,RocketMQ特别进行了针对性优化,例如通过调整生产消息的线程池数量和优化消息ID生成的逻辑,以适应高TPS的场景Θic-3Θ。

4. **网络通信优化**

- **精简消息协议头**: 对消息生产的指令进行了简化处理,直接设置每个属性而非使用通用的解析器,这样简化了处理流程,提升了效率Θic-4Θ。

- **优化序列化机制**: 对消息的编解码过程进行了优化,减少了不必要的对象创建和数据处理开销,尤其在高并发场景下效果显著Θic-4Θ。

5. **存储层优化**

- **文件预热**: 开启文件预热(`warmMapedFileEnable=true`),避免了日志文件在分配内存时出现的缺页中断,优化了文件操作的性能Θic-2Θ。

- **关闭不必要的数据传输**: 将`transferMsgByHeap`设置为`false`,避免了在响应消费请求时不必要的数据重新读取到堆内存的过程,直接从PageCache发送数据给客户端,减轻了堆内存的压力Θic-2Θ。

 

除了上述这些优化措施外,还需考虑以下因素:

 

- **硬件配置**: 高性能的硬件配置,如使用SSD硬盘,能够提供更快的读写速度,对RocketMQ的性能有直接影响。

- **网络环境**: 低延迟、高带宽的网络环境可以确保消息的快速传递,减少因网络问题导致的性能瓶颈。

- **正确的版本选择**: 随着新版本的发布,如4.9.1版本,带来了性能的提升和新特性的支持,选择合适的版本对于发挥RocketMQ的最佳性能至关重要Θic-3Θ。

Apache RocketMQ通过一系列精心设计的系统优化、JVM配置调整、代码级重构以及网络和存储层的优化,实现了其高性能的消息处理能力。这些优化措施不仅涵盖了多个层面,还针对特定的使用场景进行了特别的调整和改进。

相关文章:

  • 多模态大模型思路
  • 修复损坏的Excel文件比你想象的要简单,这里提供几种常见的修复方法
  • 最好用的搜题软件大学?8个公众号和软件推荐清单! #知识分享#知识分享#经验分享
  • ui自动化中,selenium进行元素定位,以及CSS,xpath定位总结
  • 记录移动端项目iOS端相对于安卓的各种兼容性问题
  • Llama模型家族之Stanford NLP ReFT源代码探索 (二)Intervention Layers层
  • Vim 快捷键
  • Java进阶_接口
  • MySQL周内训参照1、ER实体关系图与数据库模型图绘制
  • wma和mp3哪个音质好?让我告诉你哪个更胜一筹
  • CAN总线终端电阻作用
  • Redis基本操作介绍
  • CATIA入门操作案例——创成式曲面设计案例,吹风机的绘制,多截面曲面的绘制,曲面偏移和修剪
  • SQLserver前五讲课堂笔记
  • GaussDB的数种形态
  • 2019年如何成为全栈工程师?
  • 4. 路由到控制器 - Laravel从零开始教程
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • Intervention/image 图片处理扩展包的安装和使用
  • IOS评论框不贴底(ios12新bug)
  • Mysql数据库的条件查询语句
  • Unix命令
  • Zsh 开发指南(第十四篇 文件读写)
  • 番外篇1:在Windows环境下安装JDK
  • 猴子数据域名防封接口降低小说被封的风险
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 今年的LC3大会没了?
  • 利用jquery编写加法运算验证码
  • 前端_面试
  • 前嗅ForeSpider采集配置界面介绍
  • 携程小程序初体验
  • 责任链模式的两种实现
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (19)夹钳(用于送货)
  • (2)nginx 安装、启停
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (备份) esp32 GPIO
  • (独孤九剑)--文件系统
  • (二)构建dubbo分布式平台-平台功能导图
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)大道至简,职场上做人做事做管理
  • ***监测系统的构建(chkrootkit )
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET CORE 第一节 创建基本的 asp.net core
  • .net core 依赖注入的基本用发
  • .net开发引用程序集提示没有强名称的解决办法
  • .NET运行机制
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution