项目 | RabbitMQ | ActiveMQ | RocketMQ | Kafka |
---|---|---|---|---|
所属 | Mozila Public License | Apache | Alibaba(已加入Apache) | Apache |
成熟度 | 成熟 | 成熟 | 比较成熟 | 成熟 |
授权方式 | 开源 | |||
开发语言 | ErLang | Java | Java | Scala&Java |
客户端支持语言 | 官方支持ErLang, Java, Ruby等,社区支持多种API | Java, C, C++, Python, PHP, Perl, .NET等 | Java, C++(不成熟) | 官方支持Java,社区支持多语言 |
协议支持 | AMQP, STOMP | OpenWire, STOMP, REST, XMPP, AMQP | 自有协议 | 自有协议(基于TCP的二进制协议) |
消息批量操作 | 不支持 | 支持 | ||
消息推拉模式 | 多协议, Push/Pull均支持 | Pull | ||
HA | Master/Salve模式, Master提供服务, Slave仅作备份 | 基于ZooKeeper + LevelDB的Master + Slave模式 | 支持多Master模式,多Master多Salve模式,异步复制模式,多Master多Slave同步双写模式 | 支持Replica机制,Leader宕机后,备份自动顶替,并重新选举Leader(基于Zookeeper) |
数据可靠性 | 可以保证数据不丢失,有slave作备份 | Master/Slave | 支持异步实时刷盘,同步刷盘,同步复制,异步复制 | 数据可靠,并且有Replica机制,有容灾容错能力 |
单机吞吐量 | 万级 | 万级 | 十万级 | 十万级 |
消息投递实时性 | 毫秒级 | 毫秒级 | 毫秒级(具体由consumer轮询时间决定) | |
持久化能力 | 内存、文件 | 内存、文件、数据库 | 磁盘文件 | 磁盘文件 |
堆积能力 | 支持数据堆积,但数据堆积反过来影响生产速率 | 非常好,所有消息存储在同一个commit log中 | 非常好,只要磁盘有容量,可以做到无限堆积消息,消息存储在log中,每个分区一个log文件 | |
是否有序 | 若想有序,只能一个client | 可以支持有序 | 有序 | 多client保证有序 |
事务 | 不支持 | 支持 | 不支持,但可通过Low Level API保证仅消费一次 | |
集群 | 支持 | |||
负载均衡 | 支持 | |||
管理界面 | 较好(RabbitAdmin) | 一般 | 命令行界面(RocketMQ-Console) | 官方只提供命令行版本,Yahoo开源自己Kafka管理界面Kafka-Manager |
部署方式 | 独立 | |||
Broker端过滤消息 | 不支持 | 支持(通过tag过滤,类似于子topic) | 不支持 | |
消息查询 | 不支持 | 支持(根据MessageId查询,支持根据MessageKey查询) | 不支持 | |
消息失败重试 | 支持 | 支持(offset存储在broker中) | 不支持失败重试(offset存储在consumer中,无法保证;0.8.2版本后支持将offset存储在Zookeeper中) |