主流消息队列RabbitMQ Kafka ActiveMQ RocketMQ使用对比

一、消息队列(MQ)概述

消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以简单地描述为:当不需要立即获得结果,但是并发量又需要进行控制的时候,差不多就是需要使用消息队列的时候。
消息队列主要解决了应用耦合、异步处理、流量削锋等问题。
当前使用较多的消息队列有RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq等,而部分数据库如Redis、Mysql以及phxsql也可实现消息队列的功能。

二、主流消息队列使用对比

综合表格对比

消息队列 事务 管理页面 可用性 消息重复 吞吐量 顺序消息 并发读
Kafka 支持 一般 非常高(分布式) 支持at least once、at most once 极大 Kafka按批次发送消息和消费消息。发送端将多个小消息合并,批量发向Broker,消费端每次取出一个批次的消息批量处理 支持
RabbitMQ 支持 高(主从) 支持at least once、at most once 比较大 不支持 极高 本身是用Erlang语言写的,并发性能高。
ZeroMQ 不支持 只有重传机制,消息丢失重传就失效 极大 不支持
RocketMQ 支持 非常高(分布式) 支持at least once 大 rocketMQ接收端可以批量消费消息,可以配置每次消费的消息数,但是发送端不是批量发送 支持
ActiveMQ 支持 一般 高(主从 支持at least once 比较大 不支持

持久化比较
ActiveMq 、RabbitMq 和 Kafka都支持,ZeroMQ不支持持久化。持久化消息主要是指我们机器在不可抗力因素等情况下挂掉了,消息不会丢失的机制。

三、最后

综上所述,RabbitMQ 和 Kafka是比较中表现是出色的,但RabbitMq 比 Kafka 成熟,在可用性上、稳定性上、可靠性上,RabbitMq 胜于 Kafka (理论上)。
另外,Kafka 的定位主要在日志等方面,因为Kafka 设计的初衷就是处理日志的,可以看做是一个日志(消息)系统一个重要组件,针对性很强,所以如果业务方面还是建议选择RabbitMq 。

详细对比可参考:<17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ 分布式消息队列>传送门

你可能感兴趣的:(RabbitMQ,消息队列,RabbitMQ,Kafka,使用对比)