主流消息中间件的对比及选型

本文介绍了消息中间件的主要使用场景,如异步处理、应用解耦、流量削峰和日志处理,以及常见MQ如RabbitMQ、RocketMQ、ActiveMQ和Kafka的特性。针对不同MQ的性能、社区活跃度和适用场景进行了分析,帮助选择适合的中间件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

消息中间件的主要使用场景

消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削峰等问题。它可以实现高性能、高可用、可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件。

1.异步处理

非核心系统流程异步化,提高系统响应性能:

image-1703759287838

image-1703759340245

同步处理:用户注册过程要依次执行写数据库、发送邮件、发送短信后,才能提示用户注册成功。

异步处理:用户注册过程先写数据库,再写消息队列后就直接提示用户注册成功,发送邮件和短信通过消息队列异步处理,提高了响应速度。

2.应用解耦

系统不是强耦合,消息接受者可以随意增加,而不需要修改消息发送者的代码。消息发送者的成功不依赖消息接受者。如订单分发:

image-1703759476453

image-1703759526298


订单管理系统和各业务系统的对接通过消息队列进行解耦,各业务系统出现问题,不影响订单管理系统。当有新的业务对接进来,只需要从消息队列中拿对应的消息,订单管理系统不需要再重新对接。

3.流量削峰

当上下游系统处理能力存在差距的时候,可以用消息队列进行缓冲:

image-1703759636693


当有秒杀业务时,一下有大量请求涌入时,很可能造成系统瘫痪,此时可以用消息队列缓冲一下。

4.日志处理

将消息队列用在日志处理中,比如Kafka可以用来解决大量日志传输的问题。

5.消息通讯

消息队列一般都内置了高效的通信机制,因此也可以用于单纯的消息通讯,比如实现点对点消息队列或者聊天室等。

常见开源跨平台MQ简介

对比常用消息队列

消息队列利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。目前业界有很多的 MQ 产品,例如 RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq 等,也有直接使用数据库 Redis 充当消息队列的案例。而这些消息队列产品,各有侧重,在实际选型时,需要结合自身需求及 MQ 产品特征,综合考虑。

image-1703729986842

image-1703729986842

总结

ActiveMQ

较早推出的消息中间件,功能强大,社区也非常成熟,有较多的文档。已经在很多公司和项目中得到应用,各种协议支持较好,有多个语言的成熟客户端。主要用于中小型项目的解耦和异步处理。

社区活跃度越来越低,版本迭代越来越慢,性能较差,会有较低概率丢失消息,缺乏大规模吞吐的场景的应用,不推荐在新项目中继续使用。

RabbitMQ

基于erlang开发,所以并发能力很强,性能极好,延时很低。社区比较活跃,版本迭代较快,有比较稳定的支持。开源提供的管理界面较丰富,用起来很方便,有多个语言的成熟客户端。中小型公司首选(对消息有顺序要求的场景除外)。

由于是erlang开发,很难读源码,国内很少有公司有实力做erlang源码级别的研究和定制,基本只能依赖开源社区技术支持,不支持集群动态扩展。

RocketMQ

接口简单易用,可以做到大规模吞吐,性能也非常好,分布式扩展也很方便。可以支撑大规模的topic数量,支持复杂MQ业务场景,经过多次阿里双11大考,可靠性和可用性值得信任。源码是java,我们可以自己阅读源码,定制自己公司的MQ,可以掌控。适合大型互联网应用。

社区活跃度一般,文档相对简单,接口这块不是按照标准JMS规范编写,有些系统要迁移需要修改大量代码,支持的语言较少。如果阿里放弃维护RocketMQ,中小型公司不一定有技术实力定制开发。

Kafka

kafka的特点其实很明显,就是仅仅提供较少的核心功能,但是提供超高的吞吐量,ms级的延迟,极高的可用性以及可靠性,而且分布式可以任意扩展;同时kafka最好是支撑较少的topic数量即可,保证其超高吞吐量。社区活动度比较高。用于大数据领域的实时计算、日志采集等场景,是业内标准。

kafka唯一的一点劣势是有可能消息重复消费,那么对数据准确性会造成极其轻微的影响,在大数据领域中以及日志采集中,这点轻微影响可以忽略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值