当前位置:首页 > 技术人生 > 编程技术 > 正文内容

常见的消息中间件对比

2020-11-14编程技术245

RabbitMQ

RabbitMQ开始是用在电信业务的可靠通信的,基于AMQP协议来实现。AMQP的主要特征是面向消息/队列/路由(包括点对点的发布/订阅)可靠性,安全。AMQP协议更多用在企业系统内,对数据一致性/稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。

优点:

1、轻量级,快速,部署使用方便。

2、支持灵活的路由配置。

RabbitMQ中,在生产者和队列之间有一个交换器模块。根据配置的路由规则,生产者发送的消息可以发送到不同的队列中。路由规则很灵活,还可以自己实现。

3、客户端支持大多数的编程语言。

4、可靠性高。

缺点:

1、性能相对一般。

RabbitMQ的性能在Kafka和RocketMQ中是最差的,每秒处理几万到几十万的消息。如果有大量消息堆积在队列中,性能会急剧下降。如果应用要求高的性能,不要选择RabbitMQ。

2、RabbitMQ是Erlang开发的,功能扩展和二次开发代价很高。

RocketMQ

RocketMQ是一个开源的消息队列,使用java实现。借鉴了Kafka的设计对消息的可靠传输以及事务性做了优化,目前在阿里被广泛应用于交易/充值/流计算/消息推送/日志流式处理/Binlog分发等场景。它刚开始也是依赖zk做集群的,但是觉得太慢就自己开发了Name Server。

优点:

1、性能稳定性可靠性高。经过了多次双11考验。

2、RocketMQ几乎具备了消息队列应该具备的所有特性和功能。

3、java开发,阅读源代码、扩展、二次开发很方便。

4、对电商领域的响应延迟做了很多优化。在大多数情况下,响应在毫秒级。性能比RabbitMQ高一个数量级,每秒处理几十万的消息。如果应用很关注响应时间,可以使用RocketMQ。

缺点:

1、跟周边系统的整合和兼容不是很好。

Kafka

Kafka的可靠性,稳定性和功能特性基本满足大多数的应用场景。特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输。

优点:

1、跟周边系统的兼容性是数一数二的,尤其是大数据和流计算领域,几乎所有相关的开源软件都支持Kafka。

2、Kafka高效,可伸缩,消息持久化。

3、支持分区、副本和容错。

4、Kafka是Scala和Java开发的,对批处理和异步处理做了大量的设计,因此Kafka可以得到非常高的性能。它的异步消息的发送和接收是三个中最好的,但是跟RocketMQ拉不开数量级,每秒处理几十万的消息。如果是异步消息,并且开启了压缩,Kafka最终可以达到每秒处理2000w消息的级别。

缺点:

1、由于是异步的和批处理的,延迟也会高,不适合电商场景。


扫描二维码推送至手机访问。

本站内容仅供学习研究,转载请以链接形式注明,如有侵犯请联系处理。

本文链接:https://strivers.cn/post/14.html

标签: 消息中间件
分享给朋友:

发表评论

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。