RabbitMQ、Kafka、RocketMQ消息中间件对比总结

简介: 不论Kafka还是RabbitMQ和RocketMQ,作为消息中间件,其作用为应用解耦、异步通讯、流量削峰填谷等。拿我之前参加的一个电商项目来说,订单消息通过MQ从订单系统到支付系统、库存系统等,当订单信息写入MQ后就不再关心后续操作,既达到了应用解耦又达到异步通信。因为订单的并发量较大,为了避免数据库承受不住,在订单信息持久化时通过MQ+定时任务将订单信息均匀的持久到数据库中,达到削峰填谷作用。那为什么有这么多的MQ?这些MQ又有什么区别?本文基于RabbitMQ、Kafka、RocketMQ,从侧重点、架构模型、消息通讯以及其他方面对比说明。

前言

不论Kafka还是RabbitMQ和RocketMQ,作为消息中间件,其作用为应用解耦、异步通讯、流量削峰填谷等。
拿我之前参加的一个电商项目来说,订单消息通过MQ从订单系统到支付系统、库存系统等,当订单信息写入MQ后就不再关心后续操作,既达到了应用解耦又达到异步通信。因为订单的并发量较大,为了避免数据库承受不住,在订单信息持久化时通过MQ+定时任务将订单信息均匀的持久到数据库中,达到削峰填谷作用。
那为什么有这么多的MQ?这些MQ又有什么区别?本文基于RabbitMQ、Kafka、RocketMQ,从侧重点、架构模型、消息通讯以及其他方面对比说明。

侧重点

每个MQ的侧重点不一样。

  • RabbitMQ

RabbitMQ由以高性能、健壮以及可伸缩性出名的Erlang语言编写,在扩展或删除Rabbit服务节点时只需要同步erlang信息即可。另外rabbitmq在数据可靠性的问题上做了很大的努力,它保证在这里数据是非常可靠的。

  • Kafka

Kafka由Scala和Java编写,与RabbitMQ不同,Kafka是一种高吞吐量的分布式消息中间件,其通过零拷贝、pagecahe技术以及分区的设计实现高吞吐,同时分区的设计也避免了消息存储瓶颈问题。

  • RocketMQ

RocketMQ是阿里出品的,参考Kafka架构使用Java语言重新编写的一个消息中间件,弥补了Kafka的扩展性,在Kafka基础上扩展了多种消息模式,比如延迟消息、事务消息。

架构模型

  • RabbitMQ

RabbitMQ基于AMQP协议实现,其模型如下:
在这里插入图片描述

Kafka与RocketMQ架构类似,RocketMQ使用NameServer代替了Zookeeper,这一点我觉得对开发人员是比较友好的,少了一个组件。

  • Kafka

在这里插入图片描述

  • RocketMQ

在这里插入图片描述

消息通讯

  • RabbitMQ

RabbitMQ支持发布订阅、Topic及RPC多种通讯方式,满足大部分消息通讯,并支持死信队列。另外,RabbitMQ的插件社区支持丰富的插件,可通过安装插件添加额外的功能。例如,延迟队列、优先队列、管理控制台等插件。

  • Kafka

相比RabbitMQ,Kafka只有单一的Topic通讯方式,消息在消费后依然不支持死信队列、延迟队列等。

  • RocketMQ

RocketMQ也是基于Topic进行通讯,毕竟架构模型相似,不过RocketMQ本身支持延迟消息、事务消息等,功能比较丰富。

其他对比

RabbitMQ Kafka RocketMQ
社区活跃度 较高 一版
持久化 支持 支持 支持
并发吞吐 极高 极高
时效性 us级 ms级 ms级
数据可靠 极高
应用场景 高可靠交易系统 日志系统、大数据应用 互联网高并发、高可用应用

总结

每个MQ的功能及作用大差不差,都有自己的优势以及不足,选择适合业务的MQ就可以。

参考文档

Kafka、RabbitMQ、RocketMQ详细了解参考[消息中间件专栏]

相关文章
|
2月前
|
消息中间件 存储 Java
RocketMQ(一):消息中间件缘起,一览整体架构及核心组件
【10月更文挑战第15天】本文介绍了消息中间件的基本概念和特点,重点解析了RocketMQ的整体架构和核心组件。消息中间件如RocketMQ、RabbitMQ、Kafka等,具备异步通信、持久化、削峰填谷、系统解耦等特点,适用于分布式系统。RocketMQ的架构包括NameServer、Broker、Producer、Consumer等组件,通过这些组件实现消息的生产、存储和消费。文章还提供了Spring Boot快速上手RocketMQ的示例代码,帮助读者快速入门。
|
16天前
|
消息中间件 大数据 Kafka
大厂面试高频:Kafka、RocketMQ、RabbitMQ 的优劣势比较
本文深入探讨了消息队列的核心概念、应用场景及Kafka、RocketMQ、RabbitMQ的优劣势比较,大厂面试高频,必知必会,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:Kafka、RocketMQ、RabbitMQ 的优劣势比较
|
2月前
|
消息中间件 编解码 Docker
【Docker项目实战】Docker部署RabbitMQ消息中间件
【10月更文挑战第8天】Docker部署RabbitMQ消息中间件
105 1
【Docker项目实战】Docker部署RabbitMQ消息中间件
|
1月前
|
消息中间件 存储 监控
ActiveMQ、RocketMQ、RabbitMQ、Kafka 的区别
【10月更文挑战第24天】ActiveMQ、RocketMQ、RabbitMQ 和 Kafka 都有各自的特点和优势,在不同的应用场景中发挥着重要作用。在选择消息队列时,需要根据具体的需求、性能要求、扩展性要求等因素进行综合考虑,选择最适合的消息队列技术。同时,随着技术的不断发展和演进,这些消息队列也在不断地更新和完善,以适应不断变化的应用需求。
82 1
|
1月前
|
消息中间件 存储 Java
吃透 RocketMQ 消息中间件,看这篇就够了!
本文详细介绍 RocketMQ 的五大要点、核心特性及应用场景,涵盖高并发业务场景下的消息中间件关键知识点。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
吃透 RocketMQ 消息中间件,看这篇就够了!
|
2月前
|
消息中间件 存储 监控
说说如何解决RocketMq消息积压?为什么Kafka性能比RocketMq高?它们区别是什么?
【10月更文挑战第8天】在分布式系统中,消息队列扮演着至关重要的角色,它不仅能够解耦系统组件,还能提供异步处理、流量削峰和消息持久化等功能。在众多的消息队列产品中,RocketMQ和Kafka无疑是其中的佼佼者。本文将围绕如何解决RocketMQ消息积压、为什么Kafka性能比RocketMQ高以及它们之间的区别进行深入探讨。
89 1
|
2月前
|
消息中间件 存储 运维
为什么说Kafka还不是完美的实时数据通道
【10月更文挑战第19天】Kafka 虽然作为数据通道被广泛应用,但在实时性、数据一致性、性能及管理方面存在局限。数据延迟受消息堆积和分区再平衡影响;数据一致性难以达到恰好一次;性能瓶颈在于网络和磁盘I/O;管理复杂性涉及集群配置与版本升级。
|
2月前
|
消息中间件 Java Kafka
Flink-04 Flink Java 3分钟上手 FlinkKafkaConsumer消费Kafka数据 进行计算SingleOutputStreamOperatorDataStreamSource
Flink-04 Flink Java 3分钟上手 FlinkKafkaConsumer消费Kafka数据 进行计算SingleOutputStreamOperatorDataStreamSource
50 1
|
4月前
|
消息中间件 Java Kafka
Kafka不重复消费的终极秘籍!解锁幂等性、偏移量、去重神器,让你的数据流稳如老狗,告别数据混乱时代!
【8月更文挑战第24天】Apache Kafka作为一款领先的分布式流处理平台,凭借其卓越的高吞吐量与低延迟特性,在大数据处理领域中占据重要地位。然而,在利用Kafka进行数据处理时,如何有效避免重复消费成为众多开发者关注的焦点。本文深入探讨了Kafka中可能出现重复消费的原因,并提出了四种实用的解决方案:利用消息偏移量手动控制消费进度;启用幂等性生产者确保消息不被重复发送;在消费者端实施去重机制;以及借助Kafka的事务支持实现精确的一次性处理。通过这些方法,开发者可根据不同的应用场景灵活选择最适合的策略,从而保障数据处理的准确性和一致性。
303 9
|
4月前
|
消息中间件 负载均衡 Java
"Kafka核心机制揭秘:深入探索Producer的高效数据发布策略与Java实战应用"
【8月更文挑战第10天】Apache Kafka作为顶级分布式流处理平台,其Producer组件是数据高效发布的引擎。Producer遵循高吞吐、低延迟等设计原则,采用分批发送、异步处理及数据压缩等技术提升性能。它支持按消息键值分区,确保数据有序并实现负载均衡;提供多种确认机制保证可靠性;具备失败重试功能确保消息最终送达。Java示例展示了基本配置与消息发送流程,体现了Producer的强大与灵活性。
70 3