主流MQ消息队列比较(ActiveMQ vs Kafka vs RocketMQ vs RabbitMQ)

鸣谢:如果您觉得本文对您有帮助,请点赞和收藏,Thanks。

主流MQ消息队列比较(ActiveMQ vs Kafka vs RocketMQ vs RabbitMQ)


一、消息队列(Message Queue)的作用

  • 解耦
  • 冗余(存储)
  • 扩展性
  • 削峰
  • 可恢复性
  • 顺序保证
  • 缓冲
  • 异步通信

二、消息中间件常用协议

  • AMQP协议
  • MQTT协议
  • STOMP协议
  • XMPP协议
  • 其他基于TCP/IP自定义的协议

三、常用MQ介绍

  1. ActiveMQ

    Apache下的一个子项目。使用Java完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,少量代码就可以高效地实现高级应用场景。可插拔的传输协议支持,比如:in-VM, TCP, SSL, NIO, UDP, multicast, JGroups and JXTA transports。ActiveMQ支持常用的多种语言客户端 C++、Java、.Net,、Python、 Php、 Ruby等。

    架构:
    主流MQ消息队列比较(ActiveMQ vs Kafka vs RocketMQ vs RabbitMQ)_第1张图片

  2. Kafka
    Apache下的一个子项目,使用scala实现的一个高性能分布式Publish/Subscribe消息队列系统,具有以下特性:

  • 快速持久化:通过磁盘顺序读写与零拷贝机制,可以在O(1)的系统开销下进行消息持久化;

  • 高吞吐:在一台普通的服务器上既可以达到10W/s的吞吐速率;

  • 高堆积:支持topic下消费者较长时间离线,消息堆积量大;

  • 完全的分布式系统:Broker、Producer、Consumer都原生自动支持分布式,依赖zookeeper自动实现复杂均衡;

  • 支持Hadoop数据并行加载:对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。

    架构:
    主流MQ消息队列比较(ActiveMQ vs Kafka vs RocketMQ vs RabbitMQ)_第2张图片

  1. RocketMQ

    阿里系下开源的一款分布式、队列模型的消息中间件,原名Metaq,3.0版本名称改为RocketMQ,是阿里参照kafka设计思想使用java实现的一套mq。同时将阿里系内部多款mq产品(Notify、metaq)进行整合,只维护核心功能,去除了所有其他运行时依赖,保证核心功能最简化,在此基础上配合阿里上述其他开源产品实现不同场景下mq的架构,目前主要多用于订单交易系统。
    具有以下特点:

  • 能够保证严格的消息顺序

  • 提供针对消息的过滤功能

  • 提供丰富的消息拉取模式

  • 高效的订阅者水平扩展能力

  • 实时的消息订阅机制

  • 亿级消息堆积能力

    架构:
    主流MQ消息队列比较(ActiveMQ vs Kafka vs RocketMQ vs RabbitMQ)_第3张图片

  1. RabbitMQ
    使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP,STOMP,也正是如此,使的它变的非常重量级,更适合于企业级的开发。同时实现了Broker架构,核心思想是生产者不会将消息直接发送给队列,消息在发送给客户端时先在中心队列排队。对路由(Routing),负载均衡(Load balance)、数据持久化都有很好的支持。多用于进行企业级的ESB整合。

    架构:
    主流MQ消息队列比较(ActiveMQ vs Kafka vs RocketMQ vs RabbitMQ)_第4张图片
    四、选型对比

主流MQ消息队列比较(ActiveMQ vs Kafka vs RocketMQ vs RabbitMQ)_第5张图片
参考链接:
RocketMQ官网
消息中间件(一)MQ详解及四大MQ比较

你可能感兴趣的:(MQ消息队列)