RocketMQ 的基本概念

103 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第22天,点击查看活动详情

基本概念

NameServer

主要用于收集其他角色的信息,主要作为一个媒介,里面有一个服务的列表,

底层由netty实现,提供了路由管理、服务注册、服务发现的功能,是一个无状态节点

nameserver是服务发现者,集群中各个角色(producer、broker、consumer等)都需要定时向nameserver上报自己的状态,以便互相发现彼此,超时不上报的话,nameserver会把它从列表中剔除

nameserver可以部署多个,当多个nameserver存在的时候,其他角色同时向他们上报信息,以保证高可用,

NameServer集群间互不通信,没有主备的概念,不会协同传输数据,这也要求 broker 在连接 nameServer 的时候向所有的 nameserver 提交注册信息,如果此时有一个 nameserver 宕机了,重启后不一致了

nameserver内存式存储,nameserver中的broker、topic等信息默认不会持久化,因为即使宕机了也可以重新拉取

为什么不用zookeeper? :rocketmq希望为了提高性能,CAP定理,客户端负载均衡

consumer

消息的消费者

通过NameServer集群获得Topic的路由信息,连接到对应的Broker上消费消息。

注意,由于Master和Slave都可以读取消息,因此Consumer会与Master和Slave都建立连接。

producer

消息的生产者

通过nameserver集群中的其中一个节点(随机选择)建立长连接,获得Topic的路由信息,包括Topic下面有哪些Queue,这些Queue分布在哪些Broker上等

接下来向提供Topic服务的Master建立长连接,且定时向Master发送心跳

broker

Broker面向producer和consumer接受和发送消息

向nameserver注册,提交自己的信息

是消息中间件的消息存储、转发服务器。

提交消息之后,producer 想发消息的时候不需要知道 broker 的地址了,因为 broker 可能会有多个来分片存储所有消息,broker 的消息应该发给谁,问 nameserver 就行,nameserver producer 发消息的时候指向一个 topic,向一个 topic 发消息,从 nameserver 中找,告诉他这个 topic 在这个 broker 上,最后直接去这个 broker 找就行,consumer 也是。这样子 broker 可以动态上下线了

每个Broker节点,在启动时,都会遍历NameServer列表,与每个NameServer建立长连接,注册自己的信息,之后定时上报