一、简介
消息队列 RocketMQ 是阿里巴巴集团基于高可用分布式集群技术,自主研发的云正式商用的专业消息中间件,既可为分布式应用系统提供异步解
耦和削峰填谷的能力,同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠重试等特性,是阿里巴巴双 11 使用的核心产品。
RocketMQ 的设计基于主题的发布与订阅模式,其核心功能包括消息发送、消息存储(Broker)、消息消费,整体设计追求简单与性能第一。
- NameServer 设计及其简单,RocketMQ 摈弃了业界常用的Zookeeper充当消息管理的“注册中心”,而是使用自主研发的 NameServer 来实现各种元数据的管理(Topic路由信息等)
- 高效的 I/O 存储,RocketMQ追求消息发送的高吞吐量,RocketMQ 的消息存储设计成文件组的概念,组内单个文件固定大小,引入了内存 映射机制,所有主题的消息存储基于顺序读写,极大提高消息写性能,同时为了兼顾消息消费与消息查找,引入消息消费队列文件与索引文件
- 容忍存在设计缺陷,适当将某些工作下放给 RocketMQ 的使用者,比如消息只消费一次,这样极大的简化了消息中间件的内核,使得 RocketMQ的实现发送变得非常简单与高效。
RocketMQ 原先阿里巴巴内部使用,与 2017 年提交到 Apache 基金会成为 Apache 基金会的顶级开源项目,GitHub 代码库链接:https://github.com/apache/rocketmq.git
RocketMQ 的官网 http://rocketmq.apache.org/
二、核心概念
核心NameServer
- NameServer是整个RocketMQ 的“大脑”,它是RocketMQ的服务注册中心,所以 RocketMQ 需要先启动 NameServer再启动 Rocket 中的 Broker。
- Broker 在启动时向所有 NameServer 注册(主要是服务器地址等),生产者在发送消息之前先从 NameServer 获取 Broker 服务器地址列表(消 费者一样),然后根据负载均衡算法从列表中选择一台服务器进行消息发送。
- NameServer 与每台 Broker 服务保持长连接,并间隔 30S 检查 Broker 是否存活,如果检测到 Broker 宕机,则从路由注册表中将其移除。这样 就可以实现 RocketMQ 的高可用。
主题
主题,Topic,消息主题,一级消息类型,生产者向其发送消息。消费者负责从 Topic 接收并消费消息。
生产者
生产者:也称为消息发布者,负责生产并发送消息至 Topic。
消费者
消费者:也称为消息订阅者,负责从 Topic 接收并消费消息。
消息
消息:生产者或消费者进行消息发送或消费的主题,对于 RocketMQ 来说,消息就是字节数组。
三、整体流程
- NameServer 先启动
- Broker 启动时向 NameServer 注册
- 生产者在发送某个主题的消息之前先从NamerServer获取Broker服务器地址列表(有可能是集群),然后根据负载均衡算法从列表中选择一台 Broker 进行消息发送。
- NameServer 与每台 Broker 服务器保持长连接,并间隔 30S 检测 Broker 是否存活,如果检测到 Broker 宕机(使用心跳机制,如果检测超过120S),则从路由注册表中将其移除。
- 消费者在订阅某个主题的消息之前从NamerServer获取Broker服务器地址列表(有可能是集群),但是消费者选择从Broker中订阅消息,订阅规则由 Broker 配置决定。
网友评论