NameServer
每个 Broker 在启动的时候会到 NameServer 注册,Producer 在发送消息前会根据 Topic 到
NameServer 获取到 Broker 的路由信息,Consumer 也会定时获取 Topic 的路由信息
Broker
Broker负责消息存储,Broker是具体提供业务的服务器,单个Broker节点与所有的NameServer节点保持⻓连接及⼼跳,并会定时将Topic信息注册到NameServer,顺带⼀提底层的通信和连接都是基于Netty实现的。
Producer
Producer由⽤户进⾏分布式部署,消息由Producer通过多种负载均衡模式发送到Broker集群,
RocketMQ 提供了三种⽅式发送消息:同步、异步和单向
Consumer
Consumer也由⽤户部署,⽀持PUSH和PULL两种消费模式,⽀持集群消费和⼴播消息,提供实时
的消息订阅机制。
Topic
Topic(主题)可以看做消息的规类,它是消息的第⼀级类型。
Tag
Tag(标签)可以看作⼦主题,它是消息的第⼆级类型
Group
分为ProducerGroup,ConsumerGroup,代表某⼀类的⽣产者和消费者,⼀般来说同⼀个服务可以作为
Group,同⼀个Group⼀般来说发送和消费的消息都是⼀样的
Queue
在Kafka中叫Partition,每个Queue内部是有序的,在RocketMQ中分为读和写两种队列,⼀般来说读
写队列数量⼀致,如果不⼀致就会出现很多问题。
消息消费模式
消息消费模式有两种:Clustering(集群消费)和Broadcasting(⼴播消费)。
⼀次完整的通信流程是怎样的?
Producer 与 NameServer集群中的其中⼀个节点(随机选择)建⽴⻓连接,定期从 NameServer 获取
Topic 路由信息,并向提供 Topic 服务的 Broker Master 建⽴⻓连接,且定时向 Broker 发送⼼跳。
Producer 只能将消息发送到 Broker master,但是 Consumer 则不⼀样,它同时和提供 Topic 服务的
Master 和 Slave建⽴⻓连接,既可以从 Broker Master 订阅消息,也可以从 Broker Slave 订阅消息。