Kafka VS RocketMQ VS RabbitMQ

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: - - kafka RocketMQ RabbitMQ 数据来源 相关文章 定位 设计定位 系统间的数据流管道,实时数据处理。 例如:常规的消息系统、网站活性跟踪,监控数据,日志收集、处理等 非日志的可靠消息传输。


- - kafka RocketMQ RabbitMQ 数据来源 相关文章
定位 设计定位 系统间的数据流管道,实时数据处理。
例如:常规的消息系统、网站活性跟踪,监控数据,日志收集、处理等
非日志的可靠消息传输。
例如:订单,交易,充值,流计算,消息推送,日志流式处理,binglog分发等
可靠消息传输。和RocketMQ类似。
基础对比 成熟度 日志领域成熟  成熟  成熟 
所属社区/公司 Apache  Alibaba开发,已加入到Apache下 Mozilla Public License 
社区活跃度 来源于网络
API完备性
文档完备性 来源于网络
开发语言 Scala Java Erlang 
支持协议 一套自行设计的基于TCP的二进制协议 自己定义的一套
(社区提供JMS--不成熟) 
AMQP 
客户端语言 C/C++、Python、Go、Erlang、.NET、Ruby、Node.js、PHP等 Java Java、C、 C++、 Python、 PHP、Perl 等 
持久化方式 磁盘文件  磁盘文件  内存、文件 
可用性、可靠性比较 部署方式 单机/集群 单机/集群 单机/集群
集群管理 zookeeper name server
选主方式 从ISR中自动选举一个leader 不支持自动选主。通过设定brokername、brokerId实现,brokername相同,brokerid=0时为maser,其他为slave 最早加入集群的broker
可用性 非常高
分布式、主从
非常高
分布式、主从

主从,采用镜像模式实现,数据量大时可能产生性能瓶颈
rabbitMQ集群部署
http://www.cnblogs.com/knowledgesea/p/6535766.html
RabbitMQ可用性、可靠性分析
http://blog.csdn.net/cadem/article/details/53422912?utm_source=itdadao&utm_medium=referral
主从切换 自动切换
N个副本,允许N-1个失效;master失效以后自动从isr中选择一个主;
不支持自动切换
master失效以后不能向master发送信息,consumer大概30s(默认)可以感知此事件,此后从slave消费;如果master无法恢复,异步复制时可能出现部分信息丢失
自动切换
最早加入集群的slave会成为master;因为新加入的slave不同步master之前的数据,所以可能会出现部分数据丢失
数据可靠性 很好
支持producer单条发送、同步刷盘、同步复制、异步。
很好
producer单条发送,broker端支持同步刷盘、异步刷盘,同步双写,异步复制。

producer支持同步/异步ack。支持队列数据持久化,镜像模式中支持主从同步
kafka也同步刷盘,但是效率较低
http://jm.taobao.org/2016/04/28/kafka-vs-rocktemq-4/
消息写入性能 非常好
每条10个字节测试:百万条/s
很好
每条10个字节测试:单机单broker约7w/s,单机3个broker约12w/s
RAM约为RocketMQ的1/2,
Disk的性能约为RAM性能的1/3
数据来源于网络
单条消息的数据量越小,性能对比时kafka表现越好
kafka vs RocktMQ: https://engineering.linkedin.com/kafka/benchmarking-apache-kafka-2-million-writes-second-three-cheap-machines
kafka vs RocktMQ VS RabbitMQ
http://www.cnblogs.com/felixzh/p/6198070.html
http://ju.outofmemory.cn/entry/177937
性能的稳定性 队列/分区多时性能不稳定,明显下降。
消息堆积时性能稳定
队列较多、消息堆积时性能稳定 消息堆积时,性能不稳定、明显下降
单机支持的队列数 单机超过64个队列/分区,Load会发生明显的飙高现象,队列越多,load越高,发送消息响应时间变长 单机支持最高5万个队列,Load不会发生明显变化 依赖于内存 数据来源于网络测评
kafka新能降低是因为topic增多时,顺序写变成了随机写
Kafka vs RocketMQ: Topic数量对单机性能的影响
http://jm.taobao.org/2016/04/07/kafka-vs-rocketmq-topic-amout/?utm_source=tuicool&utm_medium=referral
堆积能力 非常好
消息存储在log中,每个分区由一个或多个segment  log文件
非常好
所有消息存储在同一个commit log中
一般
生产者、消费者正常时,性能表现稳定;消费者不消费时,性能不稳定
http://www.cnblogs.com/purpleraintear/p/6033136.html
复制备份 消息先写入leader的log,followers从leader中pull数据,pull到数据以后先ack leader,然后写入log中。
ISR中维护与leader同步的列表,落后太多的follwer会被删除掉
同步双写
异步复制:slave启动线程从master中拉数据
普通模式下不复制;
镜像模式下:消息先到mster,然后写到slave上。加入集群之前的消息不会被复制到新的slave上。
消息投递实时性 毫秒级
具体由consumer轮询间隔时间决定
毫秒级
支持pull、push两种模式,延时通常在毫秒级
毫秒级
功能对比 顺序消费 支持顺序消费
但是一台Broker宕机后,就会产生消息乱序(来自网上,尚未找到原因)
支持顺序消费
在顺序消息场景下,消费失败时消费队列将会暂停
支持顺序消费
定时消息 不支持 开源版本仅支持定时Level 不支持
事务消息 不支持 支持 不支持
Broker端消息过滤 不支持 支持
通过tag过滤,类似于子topic
不支持
消息查询 不支持 支持
根据MessageId查询
支持根据MessageKey查询消息
不支持
消费失败重试 不支持失败重试
offset存储在consumer中,无法保证。
0.8.2版本后支持将offset存储在zk中
支持失败重试
offset存储在broker中
支持失败重试
消息重新消费 支持通过修改offset来重新消费 支持按照时间来重新消息
发送端负载均衡 可自由指定 可自由指定 需要单独loadbalancer支持
 消费并行度 消费并行度和分区数一致 顺序消费:消费并行度和分区数一致
乱序消费:消费服务器的消费线程数之和
可一次抓取多条一起消费。
镜像模式下其实也是从master消费
消费方式 consumer pull consumer pull /broker push broker push
批量发送 支持
默认producer缓存、压缩,然后批量发送
不支持 不支持
消息清理 指定文件保存时间,过期删除 指定文件保存时间,过期删除 Consumer ack以后,消息将被标记为删除
可用内存少于40%(默认),触发gc,gc时找到相邻的两个文件,合并right文件到left。
运维 系统维护 Scala语言开发,维护成本高 java语言开发,维护成本低 Erlang语言开发,维护成本高
部署依赖 zookeeper nameserver Erlang环境
管理后台 官网不提供,第三方开源管理工具可供使用;不用重新开发 官方提供,rocketmq-console 官方提供rabbitmqadmin kafka管理后台比较;http://top.jobbole.com/31084/
管理后台功能 Kafka Web Conslole
Brokers列表;Kafka 集群中 Topic列表,及对应的Partition、LogSize等信息;Topic对应的Consumer Groups、Offset、Lag等信息;
生产和消费流量图、消息预览
KafkaOffsetMonitor:
Kafka集群状态;Topic、Consumer Group列表;图形化展示topic和consumer之间的关系;图形化展示consumer的Offset、Lag等信息
Kafka Manager
管理几个不同的集群;监控集群的状态(topics, brokers, 副本分布, 分区分布);产生分区分配(Generate partition assignments)基于集群的当前状态;重新分配分区
Cluster、Topic、Connection、NameServ、Message、Broker、Offset、Consumer overview、connections、channels、exchanges、queues、admin
总结 优点 1、在高吞吐、低延迟、高可用、集群热扩展、集群容错上有非常好的表现;
2、producer端提供缓存、压缩功能,可节省性能,提高效率。
3、提供顺序消费能力
4、提供多种客户端语言
5、生态完善,在大数据处理方面有大量配套的设施。
1、在高吞吐、低延迟、高可用上有非常好的表现;消息堆积时,性能也很好。
2、api、系统设计都更加适在业务处理的场景。
3、支持多种消费方式。
4、支持broker消息过滤。
5、支持事务。
6、提供消息顺序消费能力;consumer可以水平扩展,消费能力很强。
7、集群规模在50台左右,单日处理消息上百亿;经历过大数据量的考验,比较稳定可靠。
1、在高吞吐量、高可用上较前两者有所不如。
2、支持多种客户端语言;支持amqp协议。
3、由于erlang语言的特性,性能也比较好; 使用RAM模式时,性能很好。
4、管理界面较丰富,在互联网公司也有较大规模的应用;
数据来自网络
缺点 1、消费集群数目受到分区数目的限制。
2、单机topic多时,性能会明显降低。
3、不支持事务
1、相比于kafka,使用者较少,生态不够完善。消息堆积、吞吐率上也有所不如。
2、不支持主从自动切换,master失效后,消费者需要一定的时间才能感知。
3、客户端只支持Java
1、erlang 语言难度较大。集群不支持动态扩展。
2、不支持事务、消息吞吐能力有限
3、消息堆积时,性能会明显降低






相关文章
|
4月前
|
消息中间件 Java Kafka
消息传递新纪元:探索RabbitMQ、RocketMQ和Kafka的魅力所在
【8月更文挑战第29天】这段内容介绍了在分布式系统中起到异步通信与解耦作用的消息队列,并详细探讨了三种流行的消息队列产品:RabbitMQ、RocketMQ 和 Kafka。其中,RabbitMQ 是一个基于 AMQP 协议的开源消息队列系统,支持多种消息模型;RocketMQ 则是由阿里巴巴开源的具备高性能、高可用性和高可靠性的分布式消息队列,支持事务消息等多种特性;而 Kafka 作为一个由 LinkedIn 开源的分布式流处理平台,以高吞吐量和良好的可扩展性著称。此外,还提供了使用这三种消息队列发送和接收消息的代码示例。总之,这三种消息队列各有优势,适用于不同的业务场景。
71 3
|
23天前
|
消息中间件 大数据 Kafka
大厂面试高频:Kafka、RocketMQ、RabbitMQ 的优劣势比较
本文深入探讨了消息队列的核心概念、应用场景及Kafka、RocketMQ、RabbitMQ的优劣势比较,大厂面试高频,必知必会,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:Kafka、RocketMQ、RabbitMQ 的优劣势比较
|
1月前
|
消息中间件 存储 监控
ActiveMQ、RocketMQ、RabbitMQ、Kafka 的区别
【10月更文挑战第24天】ActiveMQ、RocketMQ、RabbitMQ 和 Kafka 都有各自的特点和优势,在不同的应用场景中发挥着重要作用。在选择消息队列时,需要根据具体的需求、性能要求、扩展性要求等因素进行综合考虑,选择最适合的消息队列技术。同时,随着技术的不断发展和演进,这些消息队列也在不断地更新和完善,以适应不断变化的应用需求。
88 1
|
2月前
|
消息中间件 存储 监控
说说如何解决RocketMq消息积压?为什么Kafka性能比RocketMq高?它们区别是什么?
【10月更文挑战第8天】在分布式系统中,消息队列扮演着至关重要的角色,它不仅能够解耦系统组件,还能提供异步处理、流量削峰和消息持久化等功能。在众多的消息队列产品中,RocketMQ和Kafka无疑是其中的佼佼者。本文将围绕如何解决RocketMQ消息积压、为什么Kafka性能比RocketMQ高以及它们之间的区别进行深入探讨。
93 1
|
2月前
|
消息中间件 JSON Java
开发者如何使用轻量消息队列MNS
【10月更文挑战第19天】开发者如何使用轻量消息队列MNS
84 6
|
1月前
|
消息中间件 存储 Kafka
MQ 消息队列核心原理,12 条最全面总结!
本文总结了消息队列的12个核心原理,涵盖消息顺序性、ACK机制、持久化及高可用性等内容。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
|
2月前
|
消息中间件 安全 Java
云消息队列RabbitMQ实践解决方案评测
一文带你详细了解云消息队列RabbitMQ实践的解决方案优与劣
83 7
|
2月前
|
消息中间件
解决方案 | 云消息队列RabbitMQ实践获奖名单公布!
云消息队列RabbitMQ实践获奖名单公布!
|
2月前
|
消息中间件 存储 弹性计算
云消息队列RabbitMQ实践
云消息队列RabbitMQ实践
|
2月前
|
消息中间件 存储 监控
解决方案 | 云消息队列RabbitMQ实践
在实际业务中,网站因消息堆积和高流量脉冲导致系统故障。为解决这些问题,云消息队列 RabbitMQ 版提供高性能的消息处理和海量消息堆积能力,确保系统在流量高峰时仍能稳定运行。迁移前需进行技术能力和成本效益评估,包括功能、性能、限制值及费用等方面。迁移步骤包括元数据迁移、创建用户、网络打通和数据迁移。
71 4