1 RocketMQ环境基本的介绍

       RocketMQ是阿里巴巴旗下一款开源的MQ框架,经历过双十一考研、Java编程语言实现,有非常好完整生态系统。RocketMQ作为一款纯java、分布式、队列模型的开源消息中间件,支持事务消息、顺序消息、批量消息、定时消息、消息回溯等

2 RocketMQ与其他MQ的区别

       目前主流的MQ主要是Rocketmq、kafka、Rabbitmq,RocketMQ其实就是对kafak实现的升级版本,Rocketmq相比于Rabbitmq、kafka具有主要优势特性有:

1 RocketMQ去除对zk的依赖

2 RocketMQ支持异步和同步两种方式刷磁盘

3 RocketMQ单机支持的队列或者topic数量是5w

4 RocketMQ支持消息重试

5 RocketMQ支持严格按照一定的顺序发送消息

6 RocketMQ支持定时发送消息

7 RocketMQ支持根据消息ID来进行查询

8 RocketMQ支持根据某个时间点进行消息的回溯

9 RocketMQ支持对消息服务端的过滤

10 RocketMQ消费并行度:顺序消费 取决于queue数量,乱序消费 取决于consumer数量



3 RocketMQ NameServer核心作用
Name Server 类似与eureka实现服务注册发现 生产者、消费者topic信息都统一存放到我们的nameServer上, 去中心化,不需要实现选举(相互注册) 默认端口号为9876

4 RocketMQ专业名词

Producer: 生产者角色—投递消息给mq。
Producer Group: 生产者组
Consumer: 消费者 采用拉取/mq推送方式 获取消息offset
Consumer Group: 消费者组----在同一个组中,是不允许多个不同的消费者消费同一条消息。
多个消费者消费同一条消息呢?
两个分组 多个不同的分组中可以允许有不同分组中消费者消费同一条消息的。以组的名义关联该组消费的offset位置(后面再详细介绍)

Producer
消息生产者,位于用户的进程内,Producer通过NameServer获取所有Broker的路由信息,根据负载均衡策略选择将消息发到哪个Broker,然后调用Broker接口提交消息。

Producer Group
生产者组,简单来说就是多个发送同一类消息的生产者称之为一个生产者组。

Consumer
消息消费者,位于用户进程内。Consumer通过NameServer获取所有broker的路由信息后,向Broker发送Pull请求来获取消息数据。Consumer可以以两种模式启动,广播(Broadcast)和集群(Cluster),广播模式下,一条消息会发送给所有Consumer,集群模式下消息只会发送给一个Consumer。

Consumer Group
消费者组,和生产者类似,消费同一类消息的多个 Consumer 实例组成一个消费者组。

Topic
Topic用于将消息按主题做划分,Producer将消息发往指定的Topic,Consumer订阅该Topic就可以收到这条消息。Topic跟发送方和消费方都没有强关联关系,发送方可以同时往多个Topic投放消息,消费方也可以订阅多个Topic的消息。在RocketMQ中,Topic是一个上逻辑概念。消息存储不会按Topic分开。

Message
代表一条消息,使用MessageId唯一识别,生产者投递消息会自动对给消息生成一个全局消息id,后期的可以根据该消息全局id实现业务的防止重复执行(幂等性概念),用户在发送时可以设置messageKey,便于之后查询和跟踪。一个 Message 必须指定 Topic,相当于寄信的地址。Message 还有一个可选的 Tag 设置,以便消费端可以基于 Tag 进行过滤消息。也可以添加额外的键值对,例如你需要一个业务 key 来查找 Broker 上的消息,方便在开发过程中诊断问题。

Tag
标签可以被认为是对 Topic 进一步细化。主要用来区分和过滤消息,一般在相同业务模块中通过引入标签来标记不同用途的消息。

Broker
Broker是RocketMQ的核心模块,负责接收并存储消息,同时提供Push/Pull接口来将消息发送给Consumer。Consumer可选择从Master或者Slave读取数据。多个主/从组成Broker集群,集群内的Master节点之间不做数据交互。Broker同时提供消息查询的功能,可以通过MessageID和MessageKey来查询消息。Borker会将自己的Topic配置信息实时同步到NameServer。

Queue
Topic和Queue是1对多的关系,一个Topic下可以包含多个Queue,主要用于负载均衡。发送消息时,用户只指定Topic,Producer会根据Topic的路由信息选择具体发到哪个Queue上。Consumer订阅消息时,会根据负载均衡策略决定订阅哪些Queue的消息。

Offset
RocketMQ在存储消息时会为每个Topic下的每个Queue生成一个消息的索引文件,每个Queue都对应一个Offset记录当前Queue中消息条数。

NameServer
NameServer可以看作是RocketMQ的注册中心,它管理两部分数据:集群的Topic-Queue的路由配置;Broker的实时配置信息。其它模块通过Nameserv提供的接口获取最新的Topic配置和路由信息。