当前位置: 首页 > news >正文

MQ框架的比较

MQ框架非常之多,比较流行的有RabbitMq、ActiveMq、ZeroMq、kafka。这几种MQ到底应该选择哪个?要根据自己项目的业务场景和需求。下面我列出这些MQ之间的对比数据和资料。

第一部分:RabbitMQ,ActiveMq,ZeroMq比较

1、 TPS比较 一

ZeroMq 最好,RabbitMq 次之, ActiveMq 最差。这个结论来自于以下这篇文章。

http://blog.x-aeon.com/2013/0...

测试环境:

 Model: Dell Studio 1749

 CPU: Intel Core i3 @ 2.40 GHz

 RAM: 4 Gb

 OS: Windows 7 64 bits

其中包括持久化消息和瞬时消息的测试。注意这篇文章里面提到的MQ,都是采用默认配置的,并无调优。
图片描述

2、TPS比较二

ZeroMq 最好,RabbitMq次之, ActiveMq最差。这个结论来自于一下这篇文章。http://www.cnblogs.com/amitya...

显示的是发送和接受的每秒钟的消息数。整个过程共产生1百万条1K的消息。测试的执行是在一个Windows Vista上进行的。
图片描述

3、持久化消息比较

  zeroMq不支持,activeMq和rabbitMq都支持。持久化消息主要是指:MQ down或者MQ所在的服务器down了,消息不会丢失的机制。


4、技术点:可靠性、灵活的路由、集群、事务、高可用的队列、消息排序、问题追踪、可视化管理工具、插件系统、社区

  RabbitMq最好,ActiveMq次之,ZeroMq最差。当然ZeroMq也可以做到,不过自己必须手动写代码实现,代码量不小。尤其是可靠性中的:持久性、投递确认、发布者证实和高可用性。

  所以在可靠性和可用性上,RabbitMQ是首选,虽然ActiveMQ也具备,但是它性能不及RabbitMQ。


5、高并发

从实现语言来看,RabbitMQ最高,原因是它的实现语言是天生具备高并发高可用的erlang语言。

总结:

按照目前网络上的资料,RabbitMQ、activeM、zeroMQ三者中,综合来看,RabbitMQ是首选。下面提供一篇文章,是淘宝使用RabbitMQ的心得,可以参看一些业务场景。

http://www.docin.com/p-462677...

第二部分:kafka和RabbitMQ的比较

关于这两种MQ的比较,网上的资料并不多,最权威的的是kafka的提交者写一篇文章。http://www.quora.com/What-are...

里面提到的要点:

1、 RabbitMq比kafka成熟,在可用性上,稳定性上,可靠性上,RabbitMq超过kafka

2、 Kafka设计的初衷就是处理日志的,可以看做是一个日志系统,针对性很强,所以它并没有具备一个成熟MQ应该具备的特性

3、 Kafka的性能(吞吐量、tps)比RabbitMq要强,这篇文章的作者认为,两者在这方面没有可比性。

这里在附上两篇文章,也是关于kafka和RabbitMq之间的比较的:

1、http://www.mrhaoting.com/?p=139

2、http://www.liaoqiqi.com/post/227

总结:

两者对比后,我仍然是选择RabbitMq,性能其实是很强劲的,同时具备了一个成熟的MQ应该具有的特性,我们无需重新发明轮子。

好资料推荐:

        1、最全最给力的kafka博客:http://blog.csdn.net/lizhitao/article/category/2194509

       2、淘宝对rabbitmq的使用:http://www.docin.com/p-462677246.html
       

相关文章:

  • 更好用的集群限流功能,Sentinel 发布 v1.4.2
  • Promise面试题,控制异步流程
  • opencv 增强现实(二):特征点匹配
  • CentOS 7 root口令恢复
  • [UOJ430]line
  • JavaScript 复习之 Object对象的相关方法
  • Fundebug计费标准解释:事件数是如何定义的?
  • mysql的备份脚本
  • mysql 数据库四种事务隔离级别
  • 题解 CF191C 【Fools and Roads】
  • springMvc学习笔记(2)
  • 【组队竞赛学习】vue+node在线商城项目
  • lucene排序算法之向量空间模型(一)
  • 常见的几种数组去重的方法,总有一种适合你~
  • Python网络爬虫5 - 爬取QQ空间相册
  • 10个确保微服务与容器安全的最佳实践
  • Android单元测试 - 几个重要问题
  • Go 语言编译器的 //go: 详解
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JavaScript设计模式之工厂模式
  • java正则表式的使用
  • js递归,无限分级树形折叠菜单
  • node和express搭建代理服务器(源码)
  • Sass 快速入门教程
  • scala基础语法(二)
  • 编写高质量JavaScript代码之并发
  • 推荐一个React的管理后台框架
  • 我这样减少了26.5M Java内存!
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • RDS-Mysql 物理备份恢复到本地数据库上
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • #162 (Div. 2)
  • %check_box% in rails :coditions={:has_many , :through}
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (转)Scala的“=”符号简介
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • (转)用.Net的File控件上传文件的解决方案
  • .net core Swagger 过滤部分Api
  • .NetCore 如何动态路由
  • .py文件应该怎样打开?
  • []C/C++读取串口接收到的数据程序
  • [ACTF2020 新生赛]Include
  • [C]整形提升(转载)
  • [C++]C++入门--引用
  • [C++进阶篇]STL中vector的使用
  • [ffmpeg] aac 音频编码
  • [Go WebSocket] 多房间的聊天室(五)用多个小锁代替大锁,提高效率
  • [Linux] Ubuntu install Miniconda
  • [linux]资料收纳
  • [LLM][FT]大模型Fine-Tuning相关技术0
  • [MT8766][Android12] 取消WIFI热点超过10分钟没有连接自动关闭设定
  • [na]wireshark抓包排错-tcp.flags.reset
  • [NOIP 2003] 栈(三种方法:DP、数论、搜索)