RocketMQ基础知识

目录

一、基础概念

1、主题(Topic)

2、消息类型(MessageType)

3、消息队列 (MessageQueue)

4、消息 (Message)

5、消息视图(MessageView)

6、消息标签(MessageTag)

7、消息位点(MessageQueueOffset)

8、消费位点(ConsumerOffset)

9、消息索引(MessageKey)

10、生产者(Producer)

11、事务检查器(TransactionChecker)

12、事务状态(TransactionResolution)

13、消费者分组(ConsumerGroup)

14、消费者(Consumer)

15、消费结果(ConsumerResult)

16、订阅关系(Subscription)

二、消息存储机制

1、消息存储三个关键问题

2、消息存储文件结构

三、消息过期清理机制

四、部署模型

1、NameServer(名字服务器)

2、Broker

五、部署方式


一、基础概念

1、主题(Topic)

        RocketMQ中消息传输和储存的顶级容器,用于标识同一业务逻辑的消息。主题通过TopicName来做唯一标识和区分

        官网介绍

2、消息类型(MessageType)

        RocketMQ中按照消息传输特性的不同而定义的分类,用于类型管理和安全校验

        普通消息、事务消息、定时/延迟消息、顺序消息

3、消息队列 (MessageQueue)

        队列是消息传输和存储的实际容器,也是消息最小的存储单元。所有主题都有多个队列组成,以此实现队列数量的水平拆分和队列内部的流式存储。

        队列通过QueueId来做唯一标识和区分

        官网介绍

4、消息 (Message)

        消息是最小的数据传输单元

        生产者将业务数据打包成消息发送到服务端,服务端按照相关配置投递到消费端进行消费

        官网介绍

5、消息视图(MessageView)

        消息视图是面向开发视角提供的一种消息只读接口

        通过消息视图可以读取消息内容,但是不能对消息本身进行修改

6、消息标签(MessageTag)

        标签是更细粒度的分类属性,可以在Topic下做更进一步业务逻辑细分

        消费者通过tag可对消息进行消息过滤

7、消息位点(MessageQueueOffset)

        消息是按照到达服务端的先后顺序存储在指定主题下的多个队列中,每个消息在队列中有一个唯一的Long类型坐标,这个坐标就是消息位点

8、消费位点(ConsumerOffset)

        消息被某个消费者消费后不会立刻从队列中删除,RocketMQ会基于每个消费者分组记录消费过的最新一条消息的位点,这个位点就是消费位点

      (通俗来讲消费位点就是记录当前具体消费到哪条消息了)

9、消息索引(MessageKey)

        通过消息索引可快速查询到消息存储位置

10、生产者(Producer)

        生产者是生产消息的运行实体,一般运行在业务程序中,把业务数据打包成消息发送到服务端

        官网介绍

11、事务检查器(TransactionChecker)

        实物检查器是生产者用来检查本地事务和异常事务恢复的监听器。通过业务测数据状态来检查和判断事务消息的状态

12、事务状态(TransactionResolution)

        事务消息发送过程中,事务提交的状态标识,服务端通过事务状态控制事务消息是否应该提交和投递

        事务状态:事务提交、事务回滚、事务未决

13、消费者分组(ConsumerGroup)

        消费者分组是承载多个消费策略一致的消费者负载均衡分组

        消费者分组不是一个实体,只是一个逻辑资源。通过消费者分组内初始化多个消费者,可实现消费性能的水平拓展和高可用容灾

        同一分组下所有消费者的消费策略和消费重试策略必须一致(5.X同一从消费者分组获取,消费者不需要关注;3.X/4.X版本由消费者定义,需要注意)

        官网介绍

14、消费者(Consumer)

        消费者是接收消息并对消息进行处理的实体,一般是业务程序

        官网介绍

15、消费结果(ConsumerResult)

        PushConsumer消费监听器处理消息完成后返回的结果,用来标识本次消息是否正常处理

        消费结果包含消费成功和失败

16、订阅关系(Subscription)

        订阅关系是消费者获取、处理消息的规则和状态配置

        订阅关系由消费者分组动态注册到服务端系统,并在后续的消息传输中按照订阅关系定义的过滤规则进行消息匹配和消费进度维护

        官网介绍

二、消息存储机制

        消息按照先后到达服务端的顺序进行保存

1、消息存储三个关键问题

                a、消息存储管理粒度:消息的存储时长,并不按照主题或队列粒度

                b、消息存储判断依据:按照存储时长作为判断依据

                c、消息存储是否与消费状态有关:无

2、消息存储文件结构

                存储路径由storePathRootDir参数决定

                commitLog文件夹存储消息物理文件,consumerQueue文件夹存储逻辑队列索引

三、消息过期清理机制

        消息保存时长并不能完整控制消息的实际保存时间,因为消息存储仍然使用本地磁盘,本地磁盘空间不足时,为保证服务稳定性消息仍然会被强制清理,导致消息的实际保存时长小于设置的保存时长。

四、部署模型

1、NameServer(名字服务器)

        是一个简单的Topic路由注册中心,支持Topic、Broker的动态注册与发现

   主要功能:

        1)、 Broker管理:

                a、存储Broker集群的注册信息

                b、提供心跳检测机制,检查Broker是否存活

        2)、路由信息管理:

                存储整个Broker集群的整个路由信息和用于客户端查询的队列信息

    部署架构:

        一般部署多个实例,每个实例之间互不通信,Broker需要向每个NameServer进行注册

2、Broker

        负责消息的存储、投递、查询

        部署架构:

                standalone:单机部署

                Master-Slave:再次部署方式中,Broker分为Master节点和Slave节点,Master和Slave是一对多的方式;通过BrokerName进行指定对应关系;使用BrokerId区分Master和Slave节点,0是Master节点,非0是Slave节点。其中Master也可部署多个

五、部署方式

        官网介绍

### RocketMQ 核心知识点总结 #### Apache RocketMQ 简介 Apache RocketMQ 是一种分布式消息传递和流处理平台,最初由阿里巴巴开发并于 2016 年捐赠给 Apache 基金会[^1]。它是国内首个非 Hadoop 生态体系下的顶级项目(TLP),广泛应用于高吞吐量、低延迟的消息传递场景。 --- #### 核心组件与架构 RocketMQ 的核心架构主要由以下几个部分组成: 1. **NameServer** NameServer 是 RocketMQ 中的路由服务模块,负责管理 Broker 的注册信息并提供动态路由查询功能。它采用无状态设计,支持水平扩展[^3]。 2. **Broker** Broker 是 RocketMQ 的消息存储节点,分为 Master 和 Slave 两种角色。Master 节点负责写入消息,而 Slave 节点通过同步或异步的方式复制 Master 上的数据[^3]。 3. **Producer** Producer 是消息生产者的抽象,用于向指定 Topic 发送消息。可以通过设置合理的重试策略来提高可靠性[^4]。 4. **Consumer** Consumer 是消息消费者的抽象,用于从指定 Topic 订阅并消费消息。RocketMQ 支持多种消费模式,包括广播模式和集群模式[^3]。 5. **Topic** Topic 是消息的主题分类,用于逻辑上的隔离。每个 Topic 可以分布在多个 Queue 中,Queue 实际上是一个有序的消息列表。 --- #### 核心特性 以下是 RocketMQ 的一些关键特性和优势: 1. **高性能与高吞吐量** RocketMQ 使用高效的文件读写机制(如 MappedByteBuffer)实现持久化存储,能够满足大规模并发需求。 2. **可靠的消息传递** 提供 At-Least-Once 和 Exactly-Once 消息语义,确保消息不会丢失。通过主从同步机制,在硬件故障时仍能保障数据一致性。 3. **灵活的消息模型** 支持普通消息、顺序消息、定时/延时消息以及事务消息等多种类型。 4. **负载均衡** RocketMQ 自动分配消息到不同的 Queue,并通过 Rebalance 机制调整消费者之间的负载分布[^3]。 5. **可扩展性** 名字服务器和服务端均支持横向扩展,便于应对业务增长带来的压力[^3]。 --- #### 关键技术细节 1. **消息存储结构** - 物理存储:基于 CommitLog 文件记录消息偏移位置。 - 逻辑存储:通过 ConsumeQueue 映射物理地址至具体队列。 2. **主从同步** 主从之间可通过 SYNC_MASTER 或 ASYNC_FLUSH 方式进行数据复制。推荐使用 ASYNC_FLUSH 结合 SYNC_MASTER 来平衡性能与可靠性。 3. **消息重试与死信队列** 当消息首次投递失败时,可以触发多次重试;如果最终无法成功,则会被存入 Dead Letter Queue (DLQ)[^3]。 4. **消费幂等** 在某些场景下可能会发生重复消息的情况,因此需要开发者自行实现幂等逻辑以避免副作用[^3]。 5. **批量发送优化** 对于大批量的小型消息,建议启用批量发送功能以减少网络开销。 --- #### 生产者最佳实践 为了提升系统的稳定性和效率,以下是一些常见的生产者配置技巧: - 设置合适的 `retry` 参数控制失败后的尝试次数; - 利用压缩算法减小传输体积; - 尽可能利用批量操作降低单次调用成本[^4]。 ```java // 示例代码展示如何配置生产者参数 DefaultMQProducer producer = new DefaultMQProducer("example_group"); producer.setRetryTimesWhenSendFailed(3); producer.start(); List<Message> messages = Arrays.asList( new Message("TopicTest", "TagA", "Message Body 1".getBytes()), new Message("TopicTest", "TagB", "Message Body 2".getBytes()) ); try { SendResult result = producer.send(messages); } catch (Exception e) { System.out.println(e.getMessage()); } ``` --- #### 总结 通过对 RocketMQ 的深入分析可以看出,其不仅具备强大的基础能力,还提供了丰富的高级特性以适应复杂的实际应用场景。无论是金融支付还是电商促销活动,都可以借助这一工具完成高效的信息交互任务。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值