KafkaRocketMQRabbitMQ的对比

Posted androidstarjack

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KafkaRocketMQRabbitMQ的对比相关的知识,希望对你有一定的参考价值。

点击关注公众号,Java干货及时送达👇

概述

消息中间件是基于队列与消息的传递技术,在项目中被我们广泛应用,为系统提供同步或者异步、可靠的消息传输。在分布式、高并发的应用场景中高效、稳定的进行数据交换。有应用解耦、异步消息、最终一致性、流量削峰、广播等特点。

  • 解耦: 将消息写入消息队列,需要消息的系统自己从消息队列中订阅;

  • 异步: 异步方式可以提高执行效率,减少执行时间,生产消息后,无需同步等待消息结果,任务并行处理;

  • 最终一致: 最终一致性不是消息队列的必备特性,但确实可以依靠消息队列来做最终一致性的事情;

  • 流量削峰: 允许消息积压,根据处理能力慢慢处理积压的消息,典型的使用场景就是秒杀业务用于流量削峰场景;

  • 广播: 只需要关心消息是否送达了队列,减少了开发和联调的工作量;

消息队列(Message Queue)

Message Queue消息传送系统提供传送服务。消息传送依赖于大量支持组件,这些组件负责处理连接服务、消息的路由和传送、持久性、安全性以及日志记录。消息服务器可以使用一个或多个代理实例。
JMS(Java Messaging Service)是Java平台上有关面向消息中间件(MOM)的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发,翻译为Java消息服务

分类

1.点对点:
消息生产者(Producer)生产消息发送到队列(Queue)中,然后消费者(Consumer)从队列中取出并消费消息;
消息被消费后,Queue中不在存储,所有消费者不可能消费到已经被消费的消息。Queue支持存在多个Consumer,但对一个消息而言只会有一个Consumer可以消费。

2.发布/订阅:
消息生产者(Producer)将消息发布到Topic中,同时有多个消费者(Consumer)订阅消费该消息。和点对点方式不同的是,发布到Topic中的消息会被所有订阅者消费。

产品介绍

产 品特点
ActiveMQApache下的一个子项,类似ZeroMQ,能够以代理人和点对点的技术实现队列。社区不是很活跃。
RabbitMQ基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。本身支持很多的协议:AMQP,XMPP, SMTP, STOM它变的非常重量级,更适合于企业级的开发。同时实现了一个经纪人(Broker)构架,这意味着消息在发送给客户端时先在中心队列排队。对路由(Routing),负载均衡(Load balance)或者数据持久化都有很好的支持。
RocketMQ阿里开源的消息中间件,它是纯Java开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。RocketMQ思路起源于Kafka,但并不是Kafka的一个Copy,它对消息的可靠传输及事务性做了优化,目前在阿里集团被广泛应用于交易、充值、流计算、消息推送、日志流式处理、binglog分发等场景。
Kafka是LinkedIn开源的分布式发布-订阅消息系统,目前归属于Apache定级项目。Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输。0.8版本开始支持复制,不支持事务,对消息的重复、丢失、错误没有严格要求,适合产生大量数据的互联网服务的数据收集业务(行为跟踪,日志收集等)。

性能对比

特 性ActiveMQRabbitMQRocketMQKafka
语言JavaErlangJavaScala
单机吞吐十万十万
时效性msusmsms(以内)
可用性高(主从架构)高(主从架构)非常高

优缺点对比

ActiveMQ

优点:

  • 单机吞吐量:万级;

  • topic数量都吞吐量的影响;

  • 时效性:ms级;

  • 可用性:高,基于主从架构实现高可用性;

  • 消息可靠性:有较低的概率丢失数据;

  • 功能支持:MQ领域的功能极其完备;

缺点

  • 官方社区现在对ActiveMQ 5.x维护越来越少,较少在大规模吞吐的场景中使用;

RabbitMQ

优点:

  • 由于erlang语言的特性,mq 性能较好,高并发;

  • 吞吐量到万级,MQ功能比较完备;

  • 健壮、稳定、易用、跨平台、支持多种语言、文档齐全;

  • 开源提供的管理界面非常棒,用起来很好用;

  • 社区活跃度高;

缺点

  • erlang开发,很难去看懂源码,基本职能依赖于开源社区的快速维护和修复bug,不利于做二次开发和维护;

  • RabbitMQ确实吞吐量会低一些,这是因为他做的实现机制比较重;

  • 需要学习比较复杂的接口和协议,学习和维护成本较高;

RocketMQ

优点:

  • 单机吞吐量:十万级;

  • 可用性:非常高,分布式架构;

  • 消息可靠性:经过参数优化配置,消息可以做到0丢失;

  • 功能支持:MQ功能较为完善,还是分布式的,扩展性好;

  • 支持10亿级别的消息堆积,不会因为堆积导致性能下降;

  • 源码是java,我们可以自己阅读源码,定制自己公司的MQ,可以掌控;

缺点

  • 支持的客户端语言不多,目前是java及c++,其中c++不成熟;

  • 社区活跃度一般;

  • 没有在 mq 核心中去实现JMS等接口,有些系统要迁移需要修改大量代码;

Kafka

优点:

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

  • 时效性:ms级;

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

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

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

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

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

缺点:

  • Kafka单机超过64个队列/分区,Load会发生明显的飙高现象,队列越多,load越高,发送消息响应时间变长;

  • 使用短轮询方式,实时性取决于轮询间隔时间;

  • 消费失败不支持重试;

  • 支持消息顺序,但是一台代理宕机后,就会产生消息乱序;

  • 社区更新较慢;

选择建议

产品建议
KafkaKafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输,适合产生大量数据的互联网服务的数据收集业务。大型公司建议可以选用,如果有日志采集功能,肯定是首选kafka了。
RocketMQ天生为金融互联网领域而生,对于可靠性要求很高的场景,尤其是电商里面的订单扣款,以及业务削峰,在大量交易涌入时,后端可能无法及时处理的情况。RoketMQ在稳定性上可能更值得信赖,这些业务场景在阿里双11已经经历了多次考验,如果你的业务有上述并发场景,建议可以选择RocketMQ。
RabbitMQ结合erlang语言本身的并发优势,性能较好,社区活跃度也比较高,但是不利于做二次开发和维护。不过,RabbitMQ的社区十分活跃,可以解决开发过程中遇到的bug。 

如果你的数据量没有那么大,小公司优先选择功能比较完备的RabbitMQ。|

本文转自 https://www.jianshu.com/p/d2386210fb42,如有侵权,请联系删除。


 

BAT等大厂Java面试经验总结

想获取 Java大厂面试题学习资料

扫下方二维码回复「BAT」就好了

回复 【加群】获取github掘金交流群
回复 【电子书】获取2020电子书教程
回复 【C】获取全套C语言学习知识手册
回复 【Java】获取java相关的视频教程和资料
回复 【爬虫】获取SpringCloud相关多的学习资料
回复 【Python】即可获得Python基础到进阶的学习教程
回复 【idea破解】即可获得intellij idea相关的破解教程
关注我gitHub掘金,每天发掘一篇好项目,学习技术不迷路!
如果喜欢就给个“在看”
创作打卡挑战赛 赢取流量/现金/CSDN周边激励大奖

以上是关于KafkaRocketMQRabbitMQ的对比的主要内容,如果未能解决你的问题,请参考以下文章

高并发架构系列:KafkaRocketMQRabbitMQ的优劣势比较

使用 lm 构建回归模型时出错(`对比<-`中的错误(`*tmp*`...对比只能应用于具有2个或更多级别的因素)[重复]

对比类作文一般以啥时态为主?

从 gltf 加载模型时如何增加对比度和色彩饱和度

Beyond Compare怎样设置自动对比文件内容

当“对比只能应用于具有 2 个或更多水平的因素”时如何进行 GLM?