Apache Pulsar,RabbitMQ,RocketMQ 功能对比
功能为度可以分为多个子维度,例如:优先级队列,延迟队列(定时消息),死信队列,事务消息,非持久化主题、消费重试,消息回溯,消息追踪,消息保留、消息生存时间、多租户,多协议支持,跨语言支持,流量控制,消息顺序性,安全机制(身份认证,权限控制),消息幂等性,多中心等等。
RabbitMQ(3.8.4)、RocketMQ(4.7.1)、Pulsar(2.6.1)这三款产品大都支持这些常见功能,值得注意的是:
-
RabbitMQ不支持延迟队列(定时消息)、消息过滤、消息回溯、消息保留。
-
RocketMQ不支持优先级队列、非持久化主题、消息生存时间、多租户、多中心。
-
Pulsar不支持事务消息(2020年10月底预计发布2.7.0版本包含预览版的事务消息功能)、优先级队列、消息过滤。
-
另外,Pulsar原生支持多中心方案,称作Geo-replication,相比RabbitMQ的多中心方案(对集群、Federation 和Shovel进行组合使用),配置运维相对来说更加简单易用。
具体功能对比:
RabbitMQ | RocketMQ | Apache Pulsar | 功能介绍 | |
---|---|---|---|---|
版本 | 3.8.4 | 4.7.1 | 2.6.1 | |
开发语言 | Erlang | Java | Java | |
支持协议 | AMQP,XMPP,SMTP,STOMP | 自己定义的一套协议 | 1. 自行设计的二进制协议 2. 通过KoP(Kafka-on-Pulsar)兼容Kafka 应用程序和服务 3. 通过**AoP(即 AMQP on Pulsar)**使得RabbitMQ 应用程序可以利用 Pulsar 的特性 |
|
双机集群(HA)系统 | master/slave模式,master提供服务,slave仅作备份 | 支持多master模式,多master多slave模式,异步复制模式,同步双写 | 如果一个 Broker 失败,Pulsar 会自动将其拥有的主题分区移动到群集中剩余的某一个可用 Broker 中。需要注意的是:由于 Broker 是无状态的,当发生 Topic 的迁移时,Pulsar 只是将所有权从一个 Broker 转移到另一个 Broker,在这个过程中,不会有任何数据复制发生。 | |
同步发送 | ✔ | ✔ | ✔ | 将一直阻塞消息,直到消息成功发布并返回由broker分配给producer的消息, 适用场景:重要通知消息、短信通知、短信营销系统等 |
异步发送 | ✔ | ✔ | ✔ | producer将消息放入一个阻塞队列并立即返回, 适用场景:响应时间敏感的业务场景。 |
单向发送 | ✔ | 只发送消息,不等待服务器响应,只发送请求不等待应答。此方式发送消息的过程耗时非常短,一般在微秒级别。 适用于某些耗时非常短,但对可靠性要求并不高、不特别关心发送结果的场景,例如日志收集 |
||
消息压缩 | ✔ | Pulsar可以压缩producer在传输过程中发布的消息,有四种压缩格式可选:LZ4,ZLIB,ZSTD,SNAPPY | ||
批量发送(Batching) | ✔ | ✔ | ✔ | 启用批处理后,producer将在单个请求中累积并发送一批消息 |
分块发送(Chunking) | ✔ | 启用Chunking后(chunkingEnabled = true),如果消息大小大于允许的最大发布有效负载大小,则producer会将原始消息拆分为分块消息,并将带有分块元数据的消息分别按顺序发布给broker。在broker,分块的消息以与普通消息相同的方式存储在托管ledger中。唯一的区别是,consumer需要缓冲已分块的消息,并在收集完所有已分块的消息后将它们组合为真实消息。 | ||
消息列表分割 | ✔ | RocketMQ一批消息的总大小不应超过4MB,若超过,则建议进行消息列表分割&# |