主流消息队列对比

1. RabbitMQ(开箱即用,易于维护)

  • RabbitMQ的优点
    • 基于Erlang实现,支持AMQP协议(这是一个什么协议?),轻量级的消息队列,非常容易部署和使用
    • 支持非常灵活的路由配置,在生产者(producer)和消费者(Queue)之间增加了一个类似交换机功能的Exchange模块
    • 路由规则可以将生产者发出的消息分发到不同的队列中,可自定义实现
    • 支持客户端语言最多
  • RabbitMQ的不足
    • 对消息堆积的支持不太好,大量消息堆积会导致性能急剧下降
    • 性能一般,每秒钟可以处理几万到十几万条消息
    • 二次开发比较困难

2. RocketMQ(处理在线业务)

  • Rocket的优点
    • 基于Java实现,阿里开源,Apache顶级项目,经受多过次“双十一”的考验,性能、稳定性、可靠性值得信赖
    • 中文社区活跃,功能特性齐全
    • 可实现毫秒级响应,每秒钟大概能处理几十万条消息
    • 易于二次开发
  • Rocket的不足
    • 国产消息队列,在国际上不太流行,与周边生态系统的集成和兼容程序要略逊一筹

3. Kafka(处理海量消息)

  • Kafka的优点
    • 使用Scala和Java语言开发,LinkedIn开源,Apache顶级项目
    • 设计上大量使用批量和异步的思想,拥有超高性能
    • 异步收发性能最好,每秒钟大概能处理几十万条消息
    • 周边生态系统的兼容性是最好的,尤其在大数据和流计算领域,几乎所有的相关开源软件系统都会优先支持Kafka
  • Kafka的不足
    • 不适合在线业务场景
    • 同步收发消息的响应时延比较高

其他消息队列(不推荐使用)

1. ActiveMQ

  • 最老牌开源消息队列,十年前唯一可供选择的开源消息队列
  • 社区不活跃
  • 性能差异较大不适用于当今互联网应用场景

2. ZeroMQ

  • 不能称为是一个消息队列,只是一个消息队列的多线程网络库
  • 可将消息队列的功能集成到系统中

3. Pulsar

  • 新兴开源的消息队列产品
  • Yahoo开发,现处于成长期,流行度、稳定度不高
  • 采用存储和计算分离的设计,可能会引领未来消息队列的一个方向,可以关注一下