消息队列-01- 你的系统适合用哪种消息队列

219 阅读2分钟

没有最好的,只有最适合的。今天我们来聊一下消息队列产品的选型问题,目前市面上主要是以下三款产品占据主流。

RabbitMQ

优点

  • 俗称"兔子MQ",像它的名字一样轻量级、迅捷的特点,易部署,开箱及用。
  • 客户端支持众多的程序语言。
  • 它的与众不同之处是在生产者和消费者之间增加了一个Exchange模块可以理解为交换机,支持非常灵活的路由配置。

不足

  • 开发语言为Erlang,非常小众开发语言,而且学习曲线陡峭,不易学习,所以很难做二次开发。陡峭到什么程度?有人比喻说她是语言中的汉语,其难度指数可见一斑。
  • 性能较差,每秒处理几万到十几万条消息。
  • 对消息堆积的支持不好。在它的设计理念里面,消息队列是一个管道,大量的消息积压是一种不正常的情况,应当尽量去避免。如遭遇大量消息堆积,性能会急剧下降。

RocketMQ

优点

  • 有着不错的性能,稳定性和可靠性。
  • 有非常活跃的中文社区,由于是国人写的,源代码也很易读懂。
  • 每秒钟大概能处理几十万条消息。
  • 对在线业务的响应时延做了很多的优化,大多数情况下可以做到毫秒级的响应。

不足

  • 作为国产的消息队列,相比Kafka等同类产品,在国际上还没有那么流行,与周边生态系统的集成和兼容程度要略逊一筹。

Kafka

优点

  • Kafka与周边生态系统的兼容性是最好的,尤其在大数据和流计算领域,几乎所有的相关开源软件系统都会优先支持Kafka。
  • 设计上大量使用了批量和异步的思想,拥有超高性能。

不足

  • 消息数量比较少的时候,时延会比较高,这是由它的异步批量设计带来的问题。

小结

  • 中小公司,技术团队较小(20以下),消息堆积少,没有二次开发的需求,可以考虑使用RabbitMQ.
  • 中大型公司,技术团队初具规模(20以上),业务目前或是不久的将来会面对大量消息积压,实时性高要求等问题,RocketMQ不二选择。
  • 非在线业务场景,处理类似日志等大量数据,首选Kafka。