Apache Pulsar, RabbitMQ, RocketMQ机器消耗对比
完整搭建一个三节点的性能最优的集群,需要多少台机器
RabbitMQ
-
绿色的 X 是
Exchange
,红色是Queue
,这两者都在Server
端(称作Broker
),这部分由RabbitMQ
实现 -
蓝色的是客户端,通常有
Producer
和 Consumer 两种类型 -
消息根据
exchange
的类型、routing_key
以及binding_key
进行分发和消费;
服务端单机部署时,需要两个条件:
- Erlang环境
- RabbitMQ安装包
启动时,只需要一条命令启动RabbitMQ服务:
# 前台启动
rabbitmq-server
# 后台启动
rabbitmq-server -detached
集群部署时,依赖「镜像队列」实现高可用,需要一个主队列(master
)节点,两个从队列(slave
)节点,即需要三台机器。
RocketMQ
Producer
:消息的发送者;举例:发信者Consumer
:消息接收者;举例:收信者Broker
:暂存和传输消息;举例:邮局NameServer
:管理Broker
;举例:各个邮局的管理机构Topic
:区分消息的种类;一个发送者可以发送消息给一个或者多个Topic
;一个消息的接收者可以订阅一个或者多个Topic
消息Message Queue
:相当于是Topic
的分区;用于并行发送和接收消息
集群特点
NameServer
是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。Broker
部署相对复杂,Broker
分为Master
与Slave
,一个Master
可以对应多个Slave
,但是一个Slave
只能对应一个Master
,Master
与Slave
的对应关系通过指定相同的BrokerName
,不同的BrokerId
来定义,BrokerId
为0表示Master
,非0表示Slave
。Master
也可以部署多个。每个Broker
与NameServer
集群中的所有节点建立长连接,定时注册Topic
信息到所有NameServer
。Producer
与NameServer
集群中的其中一个节点(随机选择)建立长连接,定期从NameServer
取Topic
路由信息,并向提供Topic
服务的Master
建立长连接,且定时向Master
发送心跳。Producer
完全无状态,可集群部署。Consumer
与NameServer
集群中的其中一个节点(随机选择)建立长连接,定期从NameServer
取Topic
路由信息,并向提供Topic
服务的Master
、Slave
建立长连接,且定时向Master
、Slave
发送心跳。Consumer
既可以从Master
订阅消息,也可以从Slave
订阅消息,订阅规则由Broker
配置决定。
服务端单机部署时,需要两个条件:
- JAVA环境
- RocketMQ安装包
启动时,需要两步
-
启动namesrv
# 后台启动 nohup sh bin/mqnamesrv -n 你的公网IP:9876 &
-
启动Borker
# 后台启动 nohup sh bin/mqbroker -n 你的公网IP:9876 -c conf/broker.conf autoCreateTopicEnable=true &
集群部署时,4.5版本前,支持多主多从策略,但是主节点挂掉后都是人工运维,通过人手工切换主从关系。4.5版本后,加入自动容灾切换的 RocketMQ-on-DLedger Group
功能。
RocketMQ-on-DLedger Group
是指一组相同名称的 Broker,至少需要 3 个节点,通过 Raft
自动选举出一个 Leader
,其余节点 作为 Follower,并在 Leader
和 Follower 之间复制数据以保证高可用。
RocketMQ-on-DLedger Group
能自动容灾切换,并保证数据一致。
RocketMQ-on-DLedger Group
是可以水平扩展的,也即可以部署任意多个 RocketMQ-on-DLedger Group
同时对外提供服务。
总结,部署一个RocketMQ Dledger
集群(包含一主两从),部署时最少需要三台机器,最多需要六台机器(三台用于NameServer
集群,三台用于broker
集群)。
Apache Pulsar
Pulsar
由 3 个主要组件组成:broker、Apache BookKeeper 和 Apache ZooKeeper。Broker
是无状态服务,客户端需要连接到 broker
进行核心消息传递。而 BookKeeper
和 ZooKeeper
是有状态服务。BookKeeper
节点(bookie
)存储消息与游标(cursor
),ZooKeeper
则只用于为 broker
和 bookie
存储元数据。
服务端单机部署时,需要两个条件:
- JAVA环境
- Pulsar安装包
搭建 Pulsar
集群至少需要 3 个组件:ZooKeeper
集群、BookKeeper
集群和 broker
集群(Broker
是 Pulsar
的自身实例)。这三个集群组件如下:
ZooKeeper
集群(3 个ZooKeeper
节点组成)bookie
集群(也称为BookKeeper
集群,3 个BookKeeper
节点组成)broker
集群(3 个Pulsar
节点组成)
启动时,需要3步
-
启动
ZooKeeper
# 后台启动 bin/pulsar-daemon start zookeeper
-
启动
bookie
# 后台启动 bin/pulsar-daemon start bookie
-
启动
broker
# 后台启动 bin/pulsar-daemon start broker
官方建议至少需要6台机器:
- 3 台用于运行
ZooKeeper
集群,建议使用性能较弱的机器,Pulsar
仅将ZooKeeper
用于与协调有关的定期任务和与配置有关的任务,而不用于基本操作。 - 3 用于运行
bookie
集群和broker
集群,建议使用性能强劲的机器。
但是也可以在一台机器上同时部署ZooKeeper
,bookie
,broker
,也就是最少需要三台机器就可以部署一个Pulsar 集群。
还可以在3台机器上部署ZooKeeper
集群,另外3台机器部署bookie
集群,另3台机器部署broker
集群,也就是共需要消耗9台机器。
总结,部署一个Pulsar 集群(包含一个ZooKeeper 集群(3 个 ZooKeeper 节点组成),一个bookie 集群(也称为 BookKeeper 集群,3 个 BookKeeper 节点组成),一个broker 集群(3 个 Pulsar 节点组成)),最少需要3台机器,官方建议6台机器,最多需要9台机器。
总结
三节点集群 | RabbitMQ | RocketMQ | Apache Pulsar |
---|---|---|---|
安装所需环境 | 1. Erlang环境 2. RabbitMQ安装包 | 1. JAVA环境 2. RocketMQ安装包 | 1. JAVA环境 2. Pulsar安装包 |
包含组件 | rabbitmq-server | NameServer、Broker | ZooKeeper、BookKeeper、Broker |
机器消耗 | 3 | 最少3;最多6 | 最少3;官方建议6;最多9 |
备注:RabbitMQ和Apache Pulsar的三个节点都可以收发消息,而RocketMQ在主节点可以收发消息,从节点可以向Consumer发消息但是不能接收Producer的消息。