RabbitMQ、Kafka、RocketMQ正确选型姿势

80 阅读2分钟

Kafka的优缺点

我们先来看看大家特别熟悉的Kafka中间件。

优点:

  1. 首先,Kafka的最大优势就在于它的高吞吐量,在普通机器4CPU8G的配置下,一台机器可以抗住十几万的QPS,这一点还是相当优越的。
  2. 其次,Kafka的性能同样很高,发送消息过去基本都是毫秒级别的。
  3. Kafka支持集群部署,如果部分机器宕机不可用,则不影响Kafka的正常使用。

缺点:

  1. Kafka有可能会造成数据丢失,因为它在收到消息的时候,并不是直接写到物理磁盘的,而是先写入到磁盘缓冲区里面的。
  2. Kafka功能比较的单一 主要的就是支持收发消息,高级功能基本没有,就会造成适用场景受限。

业界里一般将kafka用来处理用户的行为日志的采集的传输,用在大数据团队较多,我们公司同样也引入了它,就只是用来收发消息这种的场景,如用户行为日志等。因为,可以接受数据的丢失,而且要求吞吐量要极高。

RabbitMQ的优缺点

其实在RabbitMQ开始被广大程序员接受的时候,就有很多公司开始将自己ActiveMQ中间件切换到RabbitMQ中去了,直到现在被使用的频率还是很高的。

优点:

  1. RabbitMQ能保证数据不丢失
  2. 能保证高可用,部分机器宕机了还可以继续使用。
  3. 支持很多高级功能,如消息重试、死信队列等

缺点:

  1. 首先是RabbitMQ吞吐量比较低,大概在每秒几万的样子,这样像对于大型电商促销秒杀就不能胜任。
  2. 集群线性扩展比较麻烦。
  3. 开发语言是erlang,懂得人不是很多,无法对其改造。

RocketMQ的优缺点:

RocketMQ是阿里巴巴开源的消息中间件,各方面也表现的比较优越,几乎同时解决了Kafka和RabbitMQ它们两个的缺点。

优点:

  1. 吞吐量很高,大概普通机器有十万QPS往上。
  2. 保证高可用,高性能。
  3. 保证数据绝对不丢失
  4. 支持大规模集群部署,线性扩展方便
  5. 支持各种高级的功能,如延迟消息、消息回朔等
  6. java语言开发,满足了国内绝大部分公司技术栈

缺点:

目前我觉得唯一的缺点就是文档没有前面两种文档详细,写的稍微简单了点。