RocketMQ、kafka、rabbitMQ不完全对比

RocketMQ、Kafka、RabbitMQ不完全对比

产品组件(组成)

产品 组件 组件 组件 组件 组件 组件 组件
Rocket MQ p(producer) c(consumer) brocker(支持pull和push,支持顺序行消费) NameServer(服务发现和服务路由,记录路由信息) CommitLog(消息持久化存储) Consumer Queue(存储的是在CommitLog中的偏移量延迟队列)
Kafak p(producer) c(consumer) brocker(存储message) zk(管理p/c/broker的注册) topic(逻辑概念)
Rabbit MQ p(producer) c(consumer) exchanger(P与ex直连,通过p的ROUTING_KEY进行消息路由,将消息发送给queue,可以持久化) Queue(与消费者直连,可持久化) Binding(exchange与queue的绑定规则) Routing Key(exchange据此路由消息) vhost

产品特性

产品 队列优先级 队列重试 消费方式 广播模式 持久化 跨语言 顺序 事务 性能 定时
Rocket MQ 支持 支持 pull+push 支持 支持 Java, C++, Go,对java最友好 支持 支持 支持
Kafka 不支持 不支持 pull 支持 支持 java编写,支持多语言 单个分区消息有序 支持 最高 不支持
Rabbit MQ 支持 支持 pull+push 支持 支持 Erlang编写,支持多语言 可以认为不支持 支持 支持

关于性能

咨询了下朋友kafaka性能搞的原因主要是Kafka的在producer端将多个小消息合并,发送到broker中,还有个重要的原因是做到零拷贝,无需CPU拷贝。还有一些其他原因如kafaka利用partition实现并行处理,最大并发度等于partition的数量。
RocketMQ没有做消息合并主要考虑到java gc的问题,还有就是消息合并发送万一出现down机,丢失消息也比不合并出现的问题大。

你可能感兴趣的:(MQ)