主流消息中间件ActiveMQ、RabbitMQ、RocketMQ、Kafka对比

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

1.异步处理

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

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

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

2.应用解耦

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

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

3.流量削峰

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

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

4.日志处理

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

5.消息通讯

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


 

总结

ActiveMQ

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

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

RabbitMQ

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

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

RocketMQ

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

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

Kafka

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值