目前系统间数据交换,普遍采用的是基于消息队列中间件(MQ)实现。但目前开源的消息中间件琳琅满目,常见就有RocketMQ、ActiveMQ、RabbitMQ、Kafka、ZeroMQ等等。
下面结合平台建设中比较关心功能点,包括可靠性、可用性、扩展能力、实现语言(便于阅读)、消费模型、消息类型、消息堆积能力、消息容错机制、处理性能等方面对市场上主流的RocketMQ、RabbitMQ、Kafka三款产品进行比较,确定谁才更适合我们的业务需要。
功能 | RocketMQ | Kafka | RabbitMQ | |
可靠性 | 同步刷盘、 异步刷盘 | 异步刷盘,丢数据概率高 | 同步刷盘 | |
可用性 | 好 | 好 | 好 | |
横向扩展能力 | 支持 | 支持 | 集群扩容依赖前端 LVS 负载均衡调度 | |
实现语言 | Java | Scala和Java | Erlang | |
消费模型 | Push / Pull | Pull | Push / Pull | |
定时消息 | 支持(只支持18个固定 Level) | 不支持 | 支持 | |
顺序消息 | 支持 | 支持 | 不支持 | |
消息堆积能力 | 百亿级别(影响性能) | 百亿级别(影响性能) | 百亿级别(影响性能) | |
消息堆积查询 | 支持 | 不支持 | 不支持 | |
消息回溯 | 支持 | 不支持 | 不支持 | |
消息重试 | 支持 | 不支持 | 支持 | |
死信队列 | 支持 | 不支持 | 支持 | |
性能(常规) | 非常好(十万级 QPS) | 非常好(百万级 QPS) | 一般(万级 QPS) | |
性能(万级 Topic 场景) | 非常好(十万级 QPS) | 低 | 低 | |
性能(海量消息堆积场景) | 非常好(十万级 QPS) | 低 | 低 |
从以上的对比结果来看,Apache RocketMQ对于其他两个优势明显。