
RocketMQ 源码解析 分层剖析
文章平均质量分 96
金甲虫Scarb
这个作者很懒,什么都没留下…
展开
-
RocketMQ 如何实现高性能消息读写?
文章目录背景实现现高性能 IO 的手段1. 顺序读写1.1 顺序写1.2 读取消息2. 页缓存(Page Cache)3. MMap4. 预分配文件5. 文件预热6. 内存级读写分离 TransientStorePool参考资料背景RocketMQ 是一个低延迟、金融级稳定的高性能消息队列。它的性能处于消息队列的第一梯队,拥有接近 Kafka 的性能表现,每秒可以处理数十万的消息。那么 RocketMQ 是如何做到这么高的性能的呢?一方面,RocketMQ 借鉴了 Kafka 的实现,运用顺序读写、页原创 2022-04-11 00:39:23 · 1624 阅读 · 0 评论 -
RocketMQ 过期文件删除机制 源码剖析
RocketMQ 的存储文件主要分三种:CommitLog、ConsumeQueue、IndexFileRocketMQ 的过期文件删除机制会定期删除已经过期的存储文件。当磁盘容量告急时,会立刻执行删除,释放磁盘空间。目前虽然有对于 RocketMQ 过期文件删除机制的文章,但我觉得没有讲的非常完善。本文详细分析一下三种存储文件的过期删除机制,避免一些坑。原创 2022-03-28 00:11:37 · 1373 阅读 · 0 评论 -
RocketMQ 延迟消息(定时消息)4.9.3 版本优化 异步投递支持
1. 概述在 RocketMQ 4.9.3 版本中,@Git-Yang 对延迟消息做了很大的优化,大幅度提升了延迟消息的性能。其中,PR#3287 将原先用来启动周期性任务的 Timer 改为使用 ScheduledExecutorService,将多延迟等级下同时发送延迟消息的性能提升了 3+ 倍。本文主要讲解的是另一个改动 PR#3458:支持延迟消息的异步投递。老版本中,延迟消息到期投递到 CommitLog 的动作是同步的,在 Dledger 模式下性能很差。新的改动将延迟消息的到期投递模式改原创 2022-03-20 23:48:57 · 724 阅读 · 0 评论 -
RocketMQ ConsumeQueue 消费队列文件
1. 概述1.1 ConsumeQueue 是什么ConsumeQueue,又称作消费队列,是 RocketMQ 存储系统的一部分,保存在磁盘中。该文件可以看作 CommitLog 关于消息消费的“索引”文件。ConsumeQueue 是一个 MappedFileQueue,即每个文件大小相同的内存映射文件队列。每个文件由大小和格式相同的索引项构成。每一个 Topic 的 Queue,都对应一个 ConsumeQueue。1.2 ConsumeQueue 的作用引入 ConsumeQueue原创 2022-03-01 22:47:06 · 2696 阅读 · 0 评论 -
RocketMQ 消息消费 轮询机制 PullRequestHoldService
1. 概述先来看看 RocketMQ 消费过程中的轮询机制是啥。首先需要补充一点消费相关的前置知识。1.1 消息消费方式RocketMQ 支持多种消费方式,包括 Push 模式和 Pull 模式Pull 模式:用户自己进行消息的拉取和消费进度的更新Push 模式:Broker 将新的消息自动发送给用户进行消费1.2 Push 消费模式我们一般使用 RocketMQ 时用的是 Push 模式,因为比较方便,不需要手动拉取消息和更新消费进度。那么你有没有想过 Push 模式是如何做到能够立即原创 2022-03-01 22:41:45 · 1977 阅读 · 1 评论 -
RocketMQ IndexFile 索引文件 源码解析
1. 概述1.1 索引文件是什么IndexFile,又可以称作索引文件,是 RocketMQ 保存在磁盘上的一种文件,属于 RocketMQ 存储的一部分。它的结构类似于类似 JDK中 HashMap。可以通过messageIndexEnable属性配置打开或关闭 IndexFile 存储功能。1.2 索引文件作用索引文件的应用场景其实比较局限,是为了提供按照 Message Key 查询消息的能力。索引文件可以通过 Message Key,查询到消息在 CommitLog 中的物理偏移量,进而从原创 2022-03-01 22:36:52 · 1089 阅读 · 0 评论