`

常用Message Queue对比

阅读更多

目前业界有很多MQ产品,我们作如下对比:

 

RabbitMQ

是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它变的非常重量级,更适合于企业级的开发。同时实现了一个经纪人(Broker)构架,这意味着消息在发送给客户端时先在中心队列排队。对路由(Routing),负载均衡(Load balance)或者数据持久化都有很好的支持。

 

Redis

是一个Key-Value的NoSQL数据库,开发维护很活跃,虽然它是一个Key-Value数据库存储系统,但它本身支持MQ功能,所以完全可以当做一个轻量级的队列服务来使用。对于RabbitMQ和Redis的入队和出队操作,各执行100万次,每10万次记录一次执行时间。测试数据分为128Bytes、512Bytes、1K和10K四个不同大小的数据。实验表明:入队时,当数据比较小时Redis的性能要高于RabbitMQ,而如果数据大小超过了10K,Redis则慢的无法忍受;出队时,无论数据大小,Redis都表现出非常好的性能,而RabbitMQ的出队性能则远低于Redis。(个人觉得一下数据在入队的10k时不太合理)

 

入队

出队

 

128B

512B

1K

10K

128B

512B

1K

10K

Redis

16088

15961

17094

25

15955

20449

18098

9355

RabbitMQ

10627

9916

9370

2366

3219

3174

2982

1588

 

ZeroMQ

号称最快的消息队列系统,尤其针对大吞吐量的需求场景。ZMQ能够实现RabbitMQ不擅长的高级/复杂的队列,但是开发人员需要自己组合多种技术框架,技术上的复杂度是对这MQ能够应用成功的挑战。ZeroMQ具有一个独特的非中间件的模式,你不需要安装和运行一个消息服务器或中间件,因为你的应用程序将扮演了这个服务角色。你只需要简单的引用ZeroMQ程序库,可以使用NuGet安装,然后你就可以愉快的在应用程序之间发送消息了。但是ZeroMQ仅提供非持久性的队列,也就是说如果down机,数据将会丢失。其中,Twitter的Storm中使用ZeroMQ作为数据流的传输。

 

ActiveMQ

是Apache下的一个子项目。 类似于ZeroMQ,它能够以代理人和点对点的技术实现队列。同时类似于RabbitMQ,它少量代码就可以高效地实现高级应用场景。RabbitMQ、ZeroMQ、ActiveMQ均支持常用的多种语言客户端 C++、Java、.Net,、Python、 Php、 Ruby等。

 

Jafka/Kafka

Kafka是Apache下的一个子项目,是一个高性能跨语言分布式Publish/Subscribe消息队列系统,而Jafka是在Kafka之上孵化而来的,即Kafka的一个升级版。具有以下特性:快速持久化,可以在O(1)的系统开销下进行消息持久化;高吞吐,在一台普通的服务器上既可以达到10W/s的吞吐速率;完全的分布式系统,Broker、Producer、Consumer都原生自动支持分布式,自动实现复杂均衡;支持Hadoop数据并行加载,对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka通过Hadoop的并行加载机制来统一了在线和离线的消息处理,这一点也是本课题所研究系统所看重的。Apache Kafka相对于ActiveMQ是一个非常轻量级的消息系统,除了性能非常好之外,还是一个工作良好的分布式系统。

 

其他一些队列列表HornetQ、Apache Qpid、Sparrow、Starling、Kestrel、Beanstalkd、Amazon SQS就不再一一分析。

 

http://blog.csdn.net/sunxinhere/article/details/7968886

分享到:
评论

相关推荐

    kafka培训.pptx

    2. **常用 Message Queue 对比** - **RabbitMQ**:支持发布订阅模式,支持持久化和集群,但不支持事务,消息可能丢失。 - **RocketMQ**:基于Java开发,支持AMQP协议,提供消息队列的集群工作流程,消息理论上不会...

    Kafka深度解析.pdf

    #### 二、为什么使用消息队列(Message Queue) 消息队列作为中间件的一种,在现代分布式系统中扮演着重要角色。下面列举了一些使用消息队列的主要原因: 1. **解耦**:消息队列插入了一个基于数据的接口层,使得...

    微服务架构引入的问题及解决方案.docx

    - **MQ(Message Queue)**:消息队列,用于实现服务间的异步通信,提高系统的解耦性和可扩展性。 3. **如何选择RPC框架** - **I/O、线程调度模型**:不同的RPC框架采用不同的I/O模型(如NIO、AIO等),以及线程...

    RabbitMQ消息队列常见面试题总结.pdf

    本文详细介绍了RabbitMQ消息队列的基本概念及其优缺点,并对比分析了几种常用的消息队列产品。此外,还深入探讨了RabbitMQ内部的工作机制,包括各个组件的功能和交互方式。对于想要深入了解RabbitMQ或准备相关面试的...

    计算机操作系统课程设计报告

    - **消息队列(message queue):** 多进程之间传递消息。 综上所述,通过本次课程设计,学生不仅能够深入了解计算机操作系统中的核心概念和技术,还能通过具体的编程实践加深对这些理论知识的理解。这对于培养学生的...

    阿里巴巴&字节抖音 面试题汇总(精华版).pdf

    - **消息循环机制**:Looper、MessageQueue和Handler三者共同构成了Android的消息循环机制。 - **IdleHandler**:在消息队列为空时被调用,可用于执行一些后台任务。 #### 8. 设计模式中的单例模式 - **懒汉式**:...

    java笔试面试题汇总 基础版 最新 最全

    - **Collection**:是Java集合框架的一部分,包括`List`、`Set`和`Queue`等子接口。 - **Collections**:工具类,提供了一系列静态方法用于操作集合,如排序、查找等。 #### 11. HashMap与Hashtable的对比 - **...

    Android开发入门书籍

    - Looper与MessageQueue **2.15 创建意图过滤器(Chapter 21: Creating Intent Filters)** - **知识点:** - IntentFilter的作用 - 广播接收器注册 - 动态与静态注册的区别 **2.16 启动活动和子活动...

    uC OS II 实时操作系统 教程

    - **3.3 消息队列(MESSAGE QUEUE)** - **队列管理**:介绍了消息队列的管理机制,包括消息的发送与接收过程。 - **3.4 中断** - **中断处理**:讨论了中断在uC/OS-II中的作用及其处理机制。 - **3.5 中断延迟** ...

    最新总结java面试题

    - 强引用是最常用的引用类型,只要强引用存在,垃圾收集器就不会回收掉被引用的对象。 - 软引用用来描述一些还有用但并非必需的对象,在系统将要发生内存溢出异常前,会把这些对象列进回收范围之中进行第二次回收...

Global site tag (gtag.js) - Google Analytics