1)TPS(事务数量/s)比较
Kafka 最高RabbitMq次之,ActiveMq 最差
2)吞吐量比较
Kafka 具有最高的吞吐量,内部采用消息批处理机制,zore-copy 机制,数据的存储和获取是本地磁盘的批量操作,具有O(1)的复杂度,消息处理效率很高。
RabbitMq 在吞吐量方面逊于Kafka,他们的出发点不一样,RabbitMq支持对消息的可靠传递,支持事务,不支持批量操作;基于存储可靠性的要求存储可以采用内存或磁盘。
3)架构方面
RabbitMq遵循AMQP协议,RabbitMq的broker 由Exchange ,Binding,queue 组成,其中exchange 和binding 组成了消息的路由键;客户端Producer 通过链接channel 和server 通信,Consumer从queue 获取消息消费(长连接,queue有消息会推送到 consumer 端,consumer 循环从输入流读取数据),RabbitMq 以broker 为中心;有消息确认机制。
Kafka 遵循一般的MQ结构,producer,broker,consumer,以consumer为中心,消息的消费信息保存到客户端consumer上,consumer根据消费的点,从broker上pull 数据;无消息确认机制。
4)可用性方面
RabbitMq 支持miror 的queue,主queue失效,miror queue 接管
Kafka 的broker 支持主备模式
ActiveMq 也支持主备模式
5)负载均衡方面
Kafka 采用zookeeper对集群中的broker ,consumer 进行管理,可以注册topic到zookeeper上;通过zookeeper的协调机制,producer保存对应的topic 的broker 信息,可以随机或轮询发送到broker上;并且producer可以基于语义分片,消息发送到broker的某个分片上。
RabbitMq 的负载均很需要单独的loadbalance进行支持。
综合比较:
ActiveMq:历史悠久的开源项目,已经在很多产品中得到了应用,实现了JMS1.1的规范,可以和spring-jms轻松整合,实现了多种协议,不够轻巧,支持持久化到数据库,对队列数较多的的情况支持不好。
RabbitMq: 它比Kafka 成熟,支持AMQP事务处理,在可靠性上,RabbitMq 超过Kafka ,性能方面超过ActiveMq
Kafka: 设计的初衷就是日志处理的,不支持AMQP事务处理,可以看作是一个日志系统,针对想很强,所以她并没有一个具备成熟MQ应该具有的特性,Kafka 的性能(吞吐量,TPS)比RabbitMq 要强,如果用来做大数据的快速处理时比较有优势的。
转载自:https://blog.csdn.net/vtopqx/article/details/76382934