RocketMQ基本知识

一、概述
1、阿里设计的分布式、队列模型的消息中间件
特点:
(1)支持严格的消息顺序;
(2)支持topic与Queue两种模式;
(3)亿级消息堆积能力;
(4)友好的分布式特性;
(5)同时支持Pul和Push方式消费;
(6)历经多次双十一考验;
(7)纯java编写,基于通信框架Netty;
2、高可靠、高并发、低延迟

二、消息消费
1、重复消费:
幂等处理,解决重复消费
2、顺序消费:RocketMQ本身支持顺序消费
原理
(1)将消息投递到同一个队列中,在队列内部RocketMQ保证先进先出。
(2)同1个队列会被投递到同1个消费者实例,再由消费者拉取数据进行消费
(3)消费者内部维护本地队列锁,保证只有1个线程进行消费

三、RocketMQ组件和集群部署结构
RocketMQ基本知识
1、NameServer 名称服务器(类似于Zookeeper)
(1)保存Broker相关元信息,并给生产者消费者查找Broker信息;
(2)无状态、可横向扩展,集群部署;
(3)每个Broker在启动时到NameServer 中注册,
(4)生产者发送消息前根据topic到NameServer 中获取Broker的路由消息
(5)消费者也定时获取topic的路由信息

2、Broker 消息服务器
(1)Broker 功能:
消息存储中心,接收生产者消息并存储,消费者从此处拉取消息
存储与消息相关的元数据:用户组、消费进度偏移量、队列等
Broker有Master和Slave2种类型:Master可写可读,Slave只读不写
集群部署:单Master、多Master、多Master多Slave(同步双写)、多Master多Slave(异步赋值)
(2)集群部署详解:
单Master
一旦Master宕机或重启,服务不可用。
多Master
所有Broker都是Master,配置简单,单个Master宕机或重启对服务无影响;
缺点:单台机器宕机期间,该机器上未被消费的消息在机器未启动该前无法消费。
多Master多Slave(同步双写):
每个Master都配一个Slave,有多对Master-Slave,主备都写成功了才返回成功;
优点:数据和服务都无单点问题,Master宕机时消息无延迟,服务和数据可用性高;
** 缺点**:相比于异步复制,性能略低,发送消息延迟略高。
多Master多Slave(异步复制):
每个Master都配一个Slave,消息采用异步复制方式,主备之间有毫秒级延迟;
优点:丢失的消息非常少,实时性不会收到影响,Master宕机可从Slave消费,中间的过程对用户程序透明,不需要人工干预,性能同多Master几乎一样;
缺点:Master宕机后,磁盘损坏的情况下丢失少量数据。

3、Producer 生产者
4、Consumer 消费者
5、Message 消息
Topic 主题:message的第一级类型
Tag 标签:message的第二级类型
Queue 队列: Topic被划分为1个或多个子主题。1个Topic下设置多个队列,发送消息时执行该消息的主题,RocketMQ会轮询该Topic下的所有对流消息发送出去。
Broker内部消息情况:
RocketMQ基本知识