https://my.oschina.net/u/4318…
最近钻研音讯队列,发现好几个框架,收罗一下进行比照,说一下选型阐明:
1)中小型软件公司,倡议选 RabbitMQ。一方面,erlang 语言天生具备高并发的个性,而且他的治理界面用起来非常不便。不思考 rocketmq 和 kafka 的起因是,一方面中小型软件公司不如互联网公司,数据量没那么大,选消息中间件,应首选性能比拟齐备的,所以 kafka 排除。RocketMQ 也很不错,只是没有 RabbitMQ 进去的早,文档和网上的材料没有 RabbitMQ 多,但也是很不错,RocketMQ 是阿里出品,当初阿里曾经把 RocketMQ 捐献给 Apache 了,保护和更新不是问题。
2) 大型软件公司,依据具体应用在 rocketMq 和 kafka 之间二选一。一方面,大型软件公司,具备足够的资金搭建分布式环境,也具备足够大的数据量。针对 rocketMQ, 大型软件公司也能够抽出人手对 rocketMQ 进行定制化开发,毕竟国内有能力改 JAVA 源码的人,还是相当多的。至于 kafka,依据业务场景抉择,如果有日志采集性能,必定是首选 kafka 了。具体该选哪个,看应用场景
(下面观点都是集体意见,仅供参考)
个性
ActiveMQ
RabbitMQ
RocketMQ
kafka
开发语言
java
erlang
java
scala
单机吞吐量
万级
万级
10 万级
10 万级
时效性
ms 级
us 级
ms 级
ms 级以内
可用性
高 (主从架构)
高 (主从架构)
十分高 (分布式架构)
十分高 (分布式架构)
性能个性
成熟的产品,在很多公司失去利用;有较多的文档;各种协定反对较好
基于 erlang 开发,所以并发能力很强,性能极其好,延时很低; 治理界面较丰盛
MQ 性能比拟齐备,扩展性佳
只反对次要的 MQ 性能,像一些音讯查问,音讯回溯等性能没有提供,毕竟是为大数据筹备的,在大数据畛域利用广。
ActiveMQ、Kafka、RocketMQ、RabbitMQ 比拟
1.ActiveMQ
长处
单机吞吐量:万级
topic 数量都吞吐量的影响:
时效性:ms 级
可用性:高,基于主从架构实现高可用性
音讯可靠性:有较低的概率失落数据
性能反对:MQ 畛域的性能极其齐备
毛病:
官网社区当初对 ActiveMQ 5.x 保护越来越少,较少在大规模吞吐的场景中应用。
2.Kafka
号称大数据的杀手锏,谈到大数据畛域内的音讯传输,则绕不开 Kafka,这款为大数据而生的消息中间件,以其百万级 TPS 的吞吐量名声大噪,迅速成为大数据畛域的宠儿,在数据采集、传输、存储的过程中施展着无足轻重的作用。
Apache Kafka 它最后由 LinkedIn 公司基于独特的设计实现为一个分布式的提交日志零碎 (a distributed commit log),之后成为 Apache 我的项目的一部分。
目前曾经被 LinkedIn,Uber, Twitter, Netflix 等大公司所驳回。
长处
性能卓越,单机写入 TPS 约在百万条 / 秒,最大的长处,就是吞吐量高。
时效性:ms 级
可用性:十分高,kafka 是分布式的,一个数据多个正本,多数机器宕机,不会失落数据,不会导致不可用
消费者采纳 Pull 形式获取音讯, 音讯有序, 通过管制可能保障所有音讯被生产且仅被生产一次;
有优良的第三方 Kafka Web 治理界面 Kafka-Manager;
在日志畛域比拟成熟,被多家公司和多个开源我的项目应用;
性能反对:性能较为简单,次要反对简略的 MQ 性能,在大数据畛域的实时计算以及日志采集被大规模应用
毛病:
Kafka 单机超过 64 个队列 / 分区,Load 会产生显著的飙高景象,队列越多,load 越高,发送音讯响应工夫变长
应用短轮询形式,实时性取决于轮询间隔时间;
生产失败不反对重试;
反对音讯程序,然而一台代理宕机后,就会产生音讯乱序;
社区更新较慢;
3.RabbitMQ
RabbitMQ 2007 年公布,是一个在 AMQP(高级音讯队列协定) 根底上实现的,可复用的企业音讯零碎,是以后最支流的消息中间件之一。
RabbitMQ 长处:
因为 erlang 语言的个性,mq 性能较好,高并发;
吞吐量到万级,MQ 性能比拟齐备
强壮、稳固、易用、跨平台、反对多种语言、文档齐全;
开源提供的治理界面十分棒,用起来很好用
社区活跃度高;
RabbitMQ 毛病:
erlang 开发,很难去看懂源码,根本职能依赖于开源社区的疾速保护和修复 bug,不利于做二次开发和保护。
RabbitMQ 的确吞吐量会低一些,这是因为他做的实现机制比拟重。
须要学习比较复杂的接口和协定,学习和保护老本较高。
4.RocketMQ
RocketMQ 出自 阿里公司的开源产品,用 Java 语言实现,在设计时参考了 Kafka,并做出了本人的一些改良。
RocketMQ 在阿里团体被广泛应用在订单,交易,充值,流计算,音讯推送,日志流式解决,binglog 散发等场景。
RocketMQ 长处:
单机吞吐量:十万级
可用性:十分高,分布式架构
音讯可靠性:通过参数优化配置,音讯能够做到 0 失落
性能反对:MQ 性能较为欠缺,还是分布式的,扩展性好
反对 10 亿级别的音讯沉积,不会因为沉积导致性能降落
源码是 java,咱们能够本人浏览源码,定制本人公司的 MQ,能够掌控
RocketMQ 毛病:
反对的客户端语言不多,目前是 java 及 c ++,其中 c ++ 不成熟;
社区活跃度个别
没有在 mq 外围中去实现 JMS 等接口,有些零碎要迁徙须要批改大量代码