Kafka、rabbitmq、zeromq、rocketmq、activemq综合对比

本文对比了Kafka、rabbitmq、zeromq、rocketmq、activemq在客户端支持、成熟度、文档、开发语言、协议、消息存储、事务、负载均衡、集群方式、管理界面、可用性、消息重复、确认机制、吞吐量、订阅形式、顺序消息、消息回溯和并发性能等方面的差异,深入探讨了它们在消息传递和分布式系统中的适用场景。
摘要由CSDN通过智能技术生成

一、客户端支持语言

Kafka:Java、C、C++、Erlang、.net、perl、PHP、Python、Ruby、Go、Javascript 等

rabbitmq:Java、C、C++、Python、PHP、Perl等

zeromq:Java、python、php、.net等

rocketmq:Java 、C++

activemq:Java、C、C++、Python、PHP、Perl、.net等

二、成熟度

Kafka:不成熟

rabbitmq:成熟

zeromq:不成熟

rocketmq:比较成熟

activemq:成熟

三、资料文档

Kafka:中

rabbitmq:多

zeromq:少

rocketmq:少

activemq:多

四、开发语言

Kafka:Scala和Java

rabbitmq:Erlang

zeromq:c

rocketmq:java

activemq:java

五、支持的协议

Kafka:自己定义的一套...(基于TCP) 

rabbitmq:AMQP

zeromq:TCP、UDP

rocketmq:自己定义的一套...

activemq:OpenWire、STOMP、REST、XMPP、AMQP 

六、消息存储

Kafka:内存、磁盘、数据库。支持大量堆积。

kafka的最小存储单元是分区,一个topic包含多个分区,kafka创建主题时,这些分区会被分配在多个服务器上,通常一个broker一台服务器。

分区首领会均匀地分布在不同的服务器上,分区副本也会均匀的分布在不同的服务器上,确保负载均衡和高可用性,当新的broker加入集群的时候,部分副本会被移动到新的broker上。

根据配置文件中的目录清单,kafka会把新的分区分配给目录清单里分区数最少的目录。

默认情况下,分区器使用轮询算法把消息均衡地分布在同一个主题的不同分区中,对于发送时指定了key的情况,会根据key的hashcode取模后的值存到对应的分区中。

rabbitmq:内存、磁盘。支持少量堆积。

rabbitmq的消息分为持久化的消息和非持久化消息,不管是持久化的消息还是非持久化的消息都可以写入到磁盘。

持久化的消息在到达队列时就写入到磁盘,并且如果可以,持久化的消息也会在内存中保存一份备份,这样可以提高一定的性能,当内存吃紧的时候会从内存中清除。非持久化的消息一般只存在于内存中,在内存吃紧的时候会被换入到磁盘中,以节省内存。

rabbitmq将非持久化消息和持久化消息保存到磁盘,是通过持久化逻辑层处理的,包含rabbit_queue_index和rabbit_msg_store两个部分,rabbit_queue_index主要存放小的消息,但是需要在内存中建立段文件。rabbit__msg_store保存大的消息,ETS表记录了消息在文件的元数据信息,通过ETS来定位消息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值