当前位置:首页 > 说编程 > 正文内容

常见的消息中间件对比

2023-01-03说编程648

常见的消息中间件有ActiveMQ、RabbitMQ、RocketMQ、Kafka 等等各种。

ActiveMQ

ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。它是一个完全支持JMS规范的的消息中间件。丰富的API,多种集群架构模式让ActiveMQ在业界成为老牌的消息中间件,在中小型企业颇受欢迎。

ActiveMQ使用完全支持 JMS1.1 和 J2EE1.4 规范的 JMS Provider 实现,少量代码就可以高效地实现高级应用场景,并且支持可插拔的传输协议,如:in-VM, TCP, SSL, NIO, UDP, multicast, JGroups and JXTA transports。支持常用的多种语言客户端如 C++、Java、.Net,、Python、 Php、 Ruby 等。

现在的 ActiveMQ 分为两个版本:

ActiveMQ Classic,就是原来的 ActiveMQ

ActiveMQ Artemis,在 RedHat 捐赠的 HornetQ 服务器代码的基础上开发的,跟前者代码完全不同,其支持 JMS2.0,使用基于 Netty 的异步 IO,大大提升了性能,不仅支持 JMS 协议,还支持 AMQP 协议、STOMP 以及 MQTT,可以说玩法相当丰富。

RabbitMQ

RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于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、保证严格的消息顺序

2、提供针对消息的过滤功能

3、提供丰富的消息拉取模式

4、高效的订阅者水平扩展能力

5、实时的消息订阅机制

6、亿级消息堆积能力

优点:

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

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

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

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

缺点:

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

Kafka

Kafka是LinkedIn开源的分布式发布-订阅消息系统,目前归属于Apache顶级项目。一开始的目的是用于日志收集和传输。

Kafka的可靠性,稳定性和功能特性基本满足大多数的应用场景。特点是基于Pull的模式来处理消息消费,追求高吞吐量,0.8版本开始支持复制,不支持事务,对消息的重复、丢失、错误没有严格要求,适合产生大量数据的互联网服务的数据收集业务。

特性:

1、快速持久化:通过磁盘顺序读写与零拷贝机制,可以在O(1)的系统开销下进行消息持久化

2、高吞吐:在一台普通的服务器上既可以达到 10W/s 的吞吐速率

3、高堆积:支持 topic 下消费者较长时间离线,消息堆积量大

4、完全的分布式系统:Broker、Producer、Consumer 都原生自动支持分布式,通过 Zookeeper 可以自动实现更加复杂的负载均衡

5、支持 Hadoop 数据并行加载

优点:

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

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

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

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

缺点:

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

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

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

本文链接:https://suyu.net/post/14.html

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

发表评论

看不清,换一张

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