ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

为啥要用消息队列(MQ),几大主流MQ框架优劣势,你会怎么选择?

2021-07-25 22:58:20  阅读:595  来源: 互联网

标签:队列 RabbitMQ Kafka MQ 消息 ActiveMQ 优劣势 RocketMQ


消息队列

即Message Queue,我们从数据结构来理解的话,Queue是一种先进先出的数据结构。所以意思就是将信息(通常指传输的数据)放入一个队列中。

消息队列的两种模式:

点对点模式

可以看到,点对点模式下有可以有多个消费者,但是对于同一个消息,只会有一个消费者能访问。通常可以用于异步推送消息,保存日志等。

发布订阅模式

发布订阅模式下,对于同一个主题(topic),任何订阅了topic的消费者都能拉取此消息。通常可以用于构建消息系统。

在项目中使用了消息队列有哪些优势呢?

解耦。各个系统之间不存在直接调用。而是通过消息的传输方式去达成业务需求,这个对于系统的侵入性很低。提高系统的性能。异步处理的重要性。便于分布式扩容。原来的代码不需要改动,只需要增加新的功能就行。数据持久化。保证部分场景下,数据的有序性。数据流处理。能更好、实时的处理大数据统计和分析。分析下市面上比较流行的几种MQ,ActiveMQ、RabbitMQ、Kafka、RocketMQ。

ActiveMQ

由Apache软件基金会所开源,基于java语言开发。算是一个很老的MQ框架了,同时也是一个非常成熟的框架了,早期在很多互联网公司得到广泛的应用。

文档齐全,支持多种语言,支持多种的高级特性,如消息组、通配符、组合队列等。同时对Spring有很好的支持,可以轻易的通过配置文件集成到系统中。

缺点:

吞吐量低。ActiveMQ持久化信息的时候是需要建立索引的,写性能下降,导致吞吐量下降。没有分片功能。当一个服务器承受不了更多的消息,就需要进行切分了。而ActiveMQ不支持,需要自己去实现。版本迭代较慢。RabbitMQ

基于Erlang语言编写的一套开源(MPL)的消息队列服务软件,Erlang语言以高性能、健壮、可伸缩出名,所以 RabbitMQ 性能很强,吞吐量也很高,支持多种协议,集群化,消息的可靠执行特性等优势,很适合企业的开发。

缺点:

吞吐量较低。由于RabbitMQ支持的协议多,所以如果要好好学习的话,成本较高。Kafka

由linkedin开源的,基于scala语言实现的一个高性能分布式Publish/Subscribe消息队列系统。

其实Kafka的由来也挺有意思的。话说 linkedin起初是使用 ActiveMQ 来进行数据系统中数据交换的,上面都说了ActiveMQ性能不咋滴,所以 linkedin 决定研发自己的消息传递系统,也就是Kafka。

Kafka跟其余的消息中间件比较,那是出名的第一快,以并发量大,社区活跃备受广大组织的喜爱。

Kafka提供了超高的吞吐量,ms级别的延迟,极高的可用性以及可靠性,而且分布式可以任意扩展,还支持大数据框架 Hadoop 数据并行加载。

缺点:

单机队列不能太高,超过64会导致性能下降。消息重复消费。对数据准确性会产生影响。缺乏一套完整的管理和监控工具。消费失败不支持重试。RocketMQ

由阿里开源,基于Java 实现的一套分布式消息中间件,已经捐献给Apache基金会。

起初阿里也使用ActiveMQ做消息系统,可能也是由于性能、可用性问题,然后才自研RocketMQ。

RocketMQ思路起源于Kafka,单机吞吐量高,消息的高可靠性,如果做好了参数配置,基本不会存在消息丢失的可能,扩展性强,支持事务等。再怎么说,RocketMQ好歹经历过淘宝双11的压力,在阿里内部项目中广泛应用。

缺点:

支持的语言极少,就java和c++。社区活跃明显比不上 kafka和RabbitMQ。功能不够完整,没去实现JMS接口,系统迁移需要修改大量的代码,增加了维护成本。我们公司目前使用的集群RabbitMQ,你们使用的哪一个?

标签:队列,RabbitMQ,Kafka,MQ,消息,ActiveMQ,优劣势,RocketMQ
来源: https://blog.csdn.net/mohuanzhen/article/details/119089376

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有