RabbitMQ,RocketMQ,Kafka,Pulsar 几种消息队列的对比

1.RabbitMQ

  • RabbitMQ 2007年发布,是一个在 AMQP (高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最主流的消息中间件之一。

(1)优点:相对轻量、非常容易部署和使用

  • RabbitMQ 的特点 Messaging that just works,“开箱即用的消息队列”。 RabbitMQ 是一个相对轻量的消息队列,非常容易部署和使用。
  • 多种协议的支持:支持多种消息队列协议,算得上是最流行的消息队列之一。
  • 灵活的路由配置,和其他消息队列不同的是,它在生产者 (Producer)和队列(Queue)之间增加了一个Exchange模块,你可以理解为交换机。这个Exchange模块的作用和交换机也非常相似,根据配置的路由规则将生产者发出的消息分发到不同的队 列中。路由的规则也非常灵活,甚至你可以自己来实现路由规则。
  • 健壮、稳定、易用、跨平台、支持多种语言、文档齐全,RabbitMQ的客户端支持的编程语言大概是所有消息队列中最多的。
  • 管理界面较丰富,在互联网公司也有较大规模的应用。
  • 社区比较活跃。

(2)缺点:对消息堆积的处理不好、性能上有瓶颈

  • RabbitMQ 对消息堆积的处理不好,在它的设计理念里面,消息队列是一个管道,大量的消息积压是一种不正常的情况,应当尽量去避免。当大量消息积压的时候,会导致RabbitMQ的性能急剧下降
  • 性能上有瓶颈,它大概每秒钟可以处理几万到十几万条消息,这个对于大多数场景足够使用了,如果对需求对性能要求非常高,那么就不太合适了。
  • RabbitMQ 使用 Erlang。开发,Erlang 的学习成本还是很高的,如果后期进行二次开发,就不太容易了。

2.RocketMQ

  • RocketMQ出自阿里公司的开源产品,用 Java 语言实现,在设计时参考了 Kafka,并做出了自己的一些改进,消息可靠性上比 Kafka 更好。经历过多次双十一的考验,性能和稳定性还是值得信赖的,RocketMQ在阿里集团被广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,binglog分发等场景。

(1)优点:消息可以做到0丢失、支持10亿级别的消息堆积

  • 单机吞吐量:十万级。
  • 可用性:非常高,分布式架构。
  • 消息可靠性:经过参数优化配置,消息可以做到0丢失,RocketMQ 的所有消息都是持久化的,先写入系统 PAGECACHE,然后刷盘,可以保证内存与磁盘都有一份数据。
  • 功能支持:MQ功能较为完善,还是分布式的,扩展性好。
  • 支持10亿级别的消息堆积,不会因为堆积导致性能下降
  • 源码是java,我们可以自己阅读源码,定制自己公司的MQ,可以掌控。

(2)缺点:支持的客户端语言不多

  • 支持的客户端语言不多,目前是 java 及 c++,其中 c++ 不成熟。
  • 社区活跃度一般,作为国产的消息队列,相比国外的比较流行的同类产品,在国际上还没有那么流行,与周边生态系统的集成和兼容程度要略逊一筹。
  • 没有在 mq 核心中去实现 JMS 等接口,有些系统要迁移需要修改大量代码。

3.Kafka

  • Apache Kafka是一个分布式消息发布订阅系统。它最初由LinkedIn公司基于独特的设计实现为一个分布式的提交日志系统( a distributed commit log),之后成为Apache项目的一部分。

  • 这是一款为大数据而生的消息中间件,在数据采集、传输、存储的过程中发挥着举足轻重的作用。

(1)优点:吞吐量高,单机写入TPS约在百万条/秒

  • 性能卓越,单机写入TPS约在百万条/秒,最大的优点,就是吞吐量高

  • 性能卓越,单机写入TPS约在百万条/秒,消息大小10个字节。

  • 可用性:非常高,kafka是分布式的,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用。

  • 消费者采用Pull方式获取消息, 消息有序, 通过控制能够保证所有消息被消费且仅被消费一次。

  • 有优秀的第三方Kafka Web管理界面Kafka-Manager。

  • 在日志领域比较成熟,被多家公司和多个开源项目使用。

  • 功能支持:功能较为简单,主要支持简单的MQ功能,在大数据领域的实时计算以及日志采集被大规模使用。

    扫描二维码关注公众号,回复: 15603813 查看本文章

(2)缺点:延迟比较高

  • 由于“攒一波再处理”导致延迟比较高。

4.Pulsar

  • Pulsar 是一个用于服务器到服务器的消息系统,具有多租户、高性能等优势。 Pulsar 最初由 Yahoo 开发,目前由 Apache 软件基金会管理。

(1)优点:极低的发布延迟和端到端延迟

  • 更多功能:Pulsar Function、多租户、Schema registry、n 层存储、多种消费模式和持久性模式等。

  • Pulsar 的单个实例原生支持多个集群,可跨机房在集群间无缝地完成消息复制。

  • 极低的发布延迟和端到端延迟。

  • 可无缝扩展到超过一百万个 topic。

  • 简单的客户端 API,支持 Java、Go、Python 和 C++。

  • Pulsar 的单个实例原生支持多个集群,可跨机房在集群间无缝地完成消息复制。

(2)缺点:流行度和成熟度低

  • 正处于成长期,流行度和成熟度相对没有那么高。

5.如何选择合适的消息队列

  • 如果对于消息队列的功能和性能要求不是很高,那么 RabbitMQ 就够了,开箱即用。

  • 如果系统使用消息队列主要场景是处理在线业务,比如在交易系统中用消息队列传递订单,RocketMQ低延迟和金融级的稳定性就可以满足。

  • 要处理海量的消息,像收集日志、监控信息或是前端的埋点这类数据,或是你的应用场景大量使用 了大数据、流计算相关的开源产品,那 Kafka 就是最合适的了。

  • 如果数据量很大,同时不希望有 Kafka 的高延迟,刚好业务场景是金融场景。RocketMQ 对 Topic 运营不太友好,特别是不支持按 Topic 删除失效消息,以及不具备宕机 Failover 能力。那么 Pulsar 可能就是你的一个选择了。

猜你喜欢

转载自blog.csdn.net/name_sakura/article/details/131047995