RocketMQ 学习之一 —— 概述

RocketMQ是一款高性能消息中间件,采用发布订阅模式,设计追求简单与性能。它自研NameServer管理元数据,引入内存映射机制提升存储性能,容忍消息重复消费,支持顺序消息、消息过滤等功能,确保消息至少被消费一次。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1、RocketMQ 的设计理念和目标

设计理念

设计目标

1. 架构模式

2. 顺序消息

3. 消息过滤

4. 消息存储

5. 消息高可用性

6. 消息到达(消费)低延迟

7. 确保消息必须被消费一次

8. 回溯消息

9. 消息堆积

10. 定时消息

11. 消息重试机制


1、RocketMQ 的设计理念和目标

设计理念

RocketMQ 设计基于主题的发布与订阅模式,其核心功能包括消息发送、消息存储(Broker)、消息消费,整体设计追求简单与性能第一,主要体现以下三方面。

1. NameServer 设计极其简单,摒弃了业务常用的使用 zookeeper 充当信息管理的“注册中心”,而是自研 NameServer 来实现元数据的管理(Topic 路由信息等)。从实际需求出发,因为 Topic 路由信息无须在集群之间保持强一致,追求最终一致性,并且能容忍分钟级的不一致。正式基于此种情况,RocketMQ 的 NameServer 集群之间互不通信,极大地降低了 NameServer 实现的复杂程度,对网络的要求也降低了不少,但是性能相较于 Zookeeper 有了极大地提升。

2. 高效的 IO 存储机制。RocketMQ 追求消息发送的高吞吐量,RocketMQ 的消息存储文件设计成文件组的概念组内单个文件大小固定,方便引入内存映射机制,所有主题的消息存储基于顺序写,极大地提供了消息写性能,同时为了兼顾消息消费与消息查找,引入了消息消费队列文件与索引文件。

3. 容忍存在设计缺陷,适当将某些工作下放给 RocketMQ 使用者。消息中间件的实现者经常会遇到一个难题:如何保证消息一定能被消息消费者消费,并且保证只消费一次。RocketMQ 的设计者给出的解决方案是不解决这个难题,而是退而求其次,只保证消息被消费者消费但设计上允许消息被重复消费,这样极大地简化了消息中间件的内核,使得实现消息发送高可用变得非常简单与高效,消息重复问题由消费者在消息消费时实现幂等。

设计目标

RocketMQ 作为一款消息中间件,需要解决如下问题。

1. 架构模式

RocketMQ 与大部分消息中间件一样,采用发布订阅模式,基本的参与组建主要包括:消息发送者、消息服务器(消息存储)、消息消费、路由发现。

2. 顺序消息

所谓顺序消息,就是消息消费者按照消息到达消息存储服务器的顺序消费。RocketMQ 可以严格保证消息有序。

3. 消息过滤

消息过滤是指在消息消费时,消息消费者可以对同一主题下的消息按照规则只消费自己感兴趣的消息。RocketMQ 消息过滤支持在服务端与消费端的消费过滤机制。

1)消息在Broker 端过滤。Broker 只将消息消费者感兴趣的消息发给消费者。

2)消息再消费端过滤,消息过滤方式完全由消费者自定义,缺点是会收到很多无用消息。

4. 消息存储

消息中间件的一个核心实现是消息的存储,对消息存储一般有如下两个维度的考量:消息堆积能力和消息存储性能。RocketMQ 追求消息存储的高性能,引入内存映射机制所有主题的消息顺序存储在同一个文件中。同时为了避免消息无限在消息存储服务器中积累,引入了消息问津过期机制与文件存储空间报警机制。

5. 消息高可用性

影响消息可靠性的原因如下:

1)Broker 正常关机。

2)Broker 异常 Crash。

3)OS Crash。

4)集群断电,但是能立即恢复供电情况。

5)机器无法开机。

6)磁盘设备损坏。

情况 1 - 4 的 RocketMQ 在同步刷盘机制下可以确保不丢失消息,在异步刷盘模式下,会丢失少量消息。情况 5 - 6 属于单点故障,一旦发生该节点上的消息全部丢失,如果开启了异步复制机制,RocketMQ 能确保只丢失少量消息,RocketMQ在后续版本中将引入双写机制,以满足消息可靠性要求极高的场合。

6. 消息到达(消费)低延迟

RocketMQ 在消息不发生堆积时,以长轮询模式实现准实时的消息推送模式。

7. 确保消息必须被消费一次

RocketMQ 通过消息消费确认机制(ACK)来确保消息至少被消费一次,但由于 ACK 消息有可能丢失,RocketMQ 无法做到消息只被消费一次,有重复消费的可能。

8. 回溯消息

RocketMQ 支持按时间回溯信息,时间维度可精确到毫秒,可以向前或向后回溯。

9. 消息堆积

消息中间件的主要功能是异步解耦,必须巨额被应对前端的数据洪峰,提高后端系统的可用性,必然要求消息中间件具备一定的消息堆积能力。RocketMQ 消息存储使用磁盘文件,可以无限循环使用。消息默认可以保留 3 天。

10. 定时消息

定时消息是指消息发送到 Broker 后不能被消费端立即消费,要到特定的时间点或者等待特定的时间后才能被消费。

11. 消息重试机制

消息重试是指消息在消费时,如果发送异常,消息中间件需要支持消息重新投递,RocketMQ 支持消息重试机制。

 

摘自:RocketMQ 技术内幕

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值