RocketMQ源码级实现原理-存储系统概要设计

存储系统概要设计

主要就是讲消息从producer到达broker后,怎么落地存储

e84a13b55fe24382920ab01059adc90a.png

d50efad9b4784bf28028fb0e9d959974.png 一个好的文件系统,它的性能肯定是要优于分布式KV和newSQL;

Kafka和RocketMQ存储模型的差别

0ecbeeac8478421b8c52c457514dd0f6.png

a1d0ec40454e44bf93971fd1e0c1f400.png1. ConsumeQueue里面放的是一个个索引条目,索引条目有三个字段:CommitLogOffSet ,MessageSize、TagHashCode

2. doDispatch 异步线程 构建ConsumeQueue

 664dad52d7ec4a56a832f087e091c4f9.png

这么多MappedFile,如何管理起来对外暴露,就用一个MappedFileQueue;

a0ce5238f7304a4f88bf7c30f7731984.png

发送模块业务架构

bb57389d7bcb4ed3be7c09aa69809d33.png

存储这块的设计很好,层次很清晰

存储逻辑层,比如CommitLog类中出了对外暴露putMessage()的接口外,还需要提供一些内部类,比如FlushRealTimeService这类的刷盘线程逻辑

存储IO层,则直接和PageCache、和磁盘打交道

94552489c95e4baaa6b3ed644b4a7643.png

也就是,不同的逻辑处理,RocketMQ都会为它分配不同的线程池,比如这里,为了处理发送端发过来的消息写入磁盘,就通过sendMssageExecutor线程池来执行sendMssageProcessor中的代码,完成一条消息的写入磁盘

0e6504dfbb134643944fc7b34b6069dc.png

消息写入模块

b57cca983fc14b7caeaa45890d1a8867.png

30ebfed364524f5d95ff030fa3e23f76.png

0bb5d9d7ba644f7db052a7c648688f96.png 1f5f25bd454b4645a7c75ca2ac8b2c01.png

Broker端,每个topic下的各个队列queue持久化后的消费进度数据
 

commitLog.putMessage()会有加锁释放锁的逻辑,因为要保证同一时间,只有一个线程去往MappedFile中写入消息数据

bae4b04d255a44d281106d223eb1a259.png

最新的NVME协议的SSD硬盘,磁盘存储:

文件写入速度,顺序读写 3g/s左右,随机读写2g/s左右(内存条的读写速度是10个g左右)

Broker端发送快速失败机制

f796df2008db42f297ab6da715b580dc.png

13941abfffb34bd2ae555c89854f8ab4.png

注意理解这个快速失败队列的好处

b2faa690ec6743189806766bff87c380.png

参考链接:RocketMQ 一行代码造成大量消息丢失

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 15:08:02       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 15:08:02       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 15:08:02       62 阅读
  4. Python语言-面向对象

    2024-07-18 15:08:02       72 阅读

热门阅读

  1. SpinalHDL之Flow

    2024-07-18 15:08:02       24 阅读
  2. 精通JVM监控与调优:工具使用与命令指南

    2024-07-18 15:08:02       23 阅读
  3. C#配置文件中AppSettings的读写

    2024-07-18 15:08:02       18 阅读
  4. Flutter 开源库学习

    2024-07-18 15:08:02       22 阅读
  5. 白骑士的C++教学附加篇 5.2 代码规范与最佳实践

    2024-07-18 15:08:02       18 阅读
  6. 基于STM32设计的人体健康监测系统(华为云IOT)(189)

    2024-07-18 15:08:02       23 阅读
  7. x264 写入码流函数分析与介绍

    2024-07-18 15:08:02       23 阅读
  8. Spring Boot 动态多数据源配置

    2024-07-18 15:08:02       23 阅读
  9. react中状态管理useState

    2024-07-18 15:08:02       18 阅读
  10. 深度学习,人工智能

    2024-07-18 15:08:02       19 阅读
  11. 英文Essay写作质量不能出现问题

    2024-07-18 15:08:02       23 阅读
  12. C++代码_让室友坑我

    2024-07-18 15:08:02       22 阅读