首页 > 其他分享 >深入解析RocketMQ的存储设计艺术(一)

深入解析RocketMQ的存储设计艺术(一)

时间:2024-07-07 12:31:29浏览次数:10  
标签:Queue 存储 Topic 消息 Offset Message 解析 RocketMQ

1. Domain Model

领域模型(Domain Model)是对领域内的概念类或现实世界中对象的可视化表示。又称概念模型、领域对象模型、分析对象模型。它专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系。

1.1 Message

Message是RocketMQ消息引擎中的主体。messageId是全局唯一的。MessageKey是业务系统(生产者)生成的,所以如果要结合业务,可以使用MessageKey作为业务系统的唯一索引。

另外Message中的equals方法和hashCode主要是为了完成消息只处理一次(Exactly-Once)。

Exactly-Once是指发送到消息系统的消息只能被消费端处理且仅处理一次,即使生产端重试消息发送导致某消息重复投递,该消息在消费端也只被消费一次。

1.2 Topic

Tags是在同一Topic中对消息进行分类

subTopics==Message Queue,其实在内存逻辑中,subTopics是对Topics的一个拓展,尤其是在MQTT这种协议下,在Topic底下会有很多subTopics。

1.3 Queue

Queue是消息物理管理单位,比如在RocketMQ的控制台中,就可以看到每一个queue中的情况(比如消息的堆积情况、消息的TPS、QPS)

1.4 Offset

对于每一个Queue来说都有Offset,这个是消费位点。

1.5 Group

业务场景中,如果有一堆发送者,一堆消费者,所以这里使用Group的概念进行管理。

1.6 对应关系

Message与 Topic是多对一的关系,一个Topic可以有多个Message.

Topic到Queue是一对多的关系,这个也是方便横向拓展,也就是消费的时候,这里可以有很多很多的Queue.

一个Queue只有一个消费位点(Offset),所以Topic和Offset也是一对多的关系Topic和Group也是多对多的关系。

1.7 消费并发度

从上面模型可以看出,要解决消费并发,就是要利用Queue,一个Topic可以分出更多的queue,每一个queue可以存放在不同的硬件上来提高并发。

1.8 热点问题(顺序、重复)

前面讲过要确保消息的顺序,生产者、队列、消费者最好都是一对一的关系。但是这样设计,并发度就会成为消息系统的瓶颈(并发度不够)

RocketMQ不解决这个矛盾的问题。理由如下:

  1. 乱序的应用实际大量存在
  2. 队列无序并不意味着

标签:Queue,存储,Topic,消息,Offset,Message,解析,RocketMQ
From: https://blog.csdn.net/jy739761380/article/details/140173235

相关文章

  • Redis基本命令源码解析-字符串命令
    1.set用于将kv设置到数据库中2.mset批量设置kvmset(msetnx)key1value1key2value2...mset:msetCommandmsetnx:msetnxCommandmsetCommand和msetnxCommand都调用msetGenericCommand2.1msetGenericCommand如果参数个数为偶数,则响应参数错误并返回如果nx=1,则......
  • raid5存储池已损毁硬盘数据
    RAID5存储池中的硬盘数据损毁是一个复杂的问题,因为它涉及到数据的冗余、存储方式以及恢复策略。一、RAID5的工作原理RAID5是一种使用条带化和奇偶校验技术的存储解决方案,它至少需要三个硬盘来构建。在这种配置中,数据和奇偶校验信息被分布在所有硬盘上,以提供数据冗余和提高读......
  • 【数据分析】RFM会员价值度模型详解:大案例解析(第28天)
    系列文章目录RFM会员价值度模型分析用户行为分析文章目录系列文章目录前言1RFM会员价值度模型分析案例1.1RFM会员价值度模型概念1.2RFM会员价值度模型实现流程1.3RFM案例代码实现1.4数据可视化1.5案例结论1.6结果保存2用户行为分析案例2.1用户行为分析概念2......
  • 【深度解析】Zxing:开源条形码图像处理库的领航者
                    在数字化浪潮席卷全球的今天,二维码和条形码已经成为我们日常生活中不可或缺的一部分,从超市购物到移动支付,从文档管理到物流追踪,它们无处不在。而在这背后,有一个开源项目默默地支撑着这一切——Zxing,一个强大的条形码图像处理库。     ......
  • 001,函数指针是一种特殊的指针,它指向的是一个函数地址,可以存储函数并作为参数传递,也可
    函数指针是一种特殊的指针001,函数指针是一种特殊的指针,它指向的是一个函数地址,可以存储函数并作为参数传递,也可以用于动态绑定和回调函数文章目录函数指针是一种特殊的指针前言总结前言#include<iostream>usingnamespacestd;intadd(inta,intb){ return......
  • mysql执行查询的过程解析
    mysql执行查询的过程客户端先发送查询语句给服务器服务器检查缓存,如果存在则返回进行sql解析,生成解析树,再预处理,生成第二个解析树,最后再经过优化器,生成真正的执行计划根据执行计划,调用存储引擎的API来执行查询将结果返回给客户端。一、客户端到服务端之间的原理客户端和服......
  • 深度解析:机器学习与深度学习的关系与区别
    一、前言在人工智能领域,机器学习与深度学习常常被提及并广泛应用。虽然它们在本质上都是通过数据训练模型以进行预测或分类,但两者之间存在着显著的区别和联系。本文将深入解析机器学习与深度学习的关系与区别,帮助读者更好地理解和应用这两种技术。二、机器学习概述定义机器......
  • C#程序调用Sql Server存储过程异常处理:调用存储过程后不返回、不抛异常的解决方案
    目录一、代码解析:二、解决方案1、增加日志记录2、异步操作注意事项3、增加超时机制4、使用线程池5、使用信号量或事件6、监控数据库连接状态在C#程序操作SqlServer数据库的实际应用中,若异常就会抛出异常,我们还能找到异常的原因,进一步去解决;但偶发的不返回、也不抛......
  • 【C++干货基地】C++模板深度解析:进阶技巧与高级特性掌握(按需实例化、全特化与偏特化)文
    ......
  • 深度解析 Raft 分布式一致性协议
    深度解析Raft分布式一致性协议本文参考转载至:浅谈Raft分布式一致性协议|图解Raft-白泽来了-博客园(cnblogs.com)深度解析Raft分布式一致性协议-掘金(juejin.cn)raft-zh_cn/raft-zh_cn.mdatmaster·maemual/raft-zh_cn(github.com)本篇文章将模拟一个KV......