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详细了解参考[消息中间件专栏]

相关文章
|
1月前
|
消息中间件 存储 Java
RocketMQ(一):消息中间件缘起,一览整体架构及核心组件
【10月更文挑战第15天】本文介绍了消息中间件的基本概念和特点,重点解析了RocketMQ的整体架构和核心组件。消息中间件如RocketMQ、RabbitMQ、Kafka等,具备异步通信、持久化、削峰填谷、系统解耦等特点,适用于分布式系统。RocketMQ的架构包括NameServer、Broker、Producer、Consumer等组件,通过这些组件实现消息的生产、存储和消费。文章还提供了Spring Boot快速上手RocketMQ的示例代码,帮助读者快速入门。
|
2月前
|
消息中间件 存储 RocketMQ
消息中间件-RocketMQ技术(二)
消息中间件-RocketMQ技术(二)
|
11天前
|
消息中间件 大数据 Kafka
大厂面试高频:Kafka、RocketMQ、RabbitMQ 的优劣势比较
本文深入探讨了消息队列的核心概念、应用场景及Kafka、RocketMQ、RabbitMQ的优劣势比较,大厂面试高频,必知必会,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:Kafka、RocketMQ、RabbitMQ 的优劣势比较
|
1月前
|
消息中间件 编解码 Docker
【Docker项目实战】Docker部署RabbitMQ消息中间件
【10月更文挑战第8天】Docker部署RabbitMQ消息中间件
97 1
【Docker项目实战】Docker部署RabbitMQ消息中间件
|
26天前
|
消息中间件 存储 监控
ActiveMQ、RocketMQ、RabbitMQ、Kafka 的区别
【10月更文挑战第24天】ActiveMQ、RocketMQ、RabbitMQ 和 Kafka 都有各自的特点和优势,在不同的应用场景中发挥着重要作用。在选择消息队列时,需要根据具体的需求、性能要求、扩展性要求等因素进行综合考虑,选择最适合的消息队列技术。同时,随着技术的不断发展和演进,这些消息队列也在不断地更新和完善,以适应不断变化的应用需求。
70 1
|
25天前
|
消息中间件 存储 Java
吃透 RocketMQ 消息中间件,看这篇就够了!
本文详细介绍 RocketMQ 的五大要点、核心特性及应用场景,涵盖高并发业务场景下的消息中间件关键知识点。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
吃透 RocketMQ 消息中间件,看这篇就够了!
|
1月前
|
消息中间件 存储 监控
说说如何解决RocketMq消息积压?为什么Kafka性能比RocketMq高?它们区别是什么?
【10月更文挑战第8天】在分布式系统中,消息队列扮演着至关重要的角色,它不仅能够解耦系统组件,还能提供异步处理、流量削峰和消息持久化等功能。在众多的消息队列产品中,RocketMQ和Kafka无疑是其中的佼佼者。本文将围绕如何解决RocketMQ消息积压、为什么Kafka性能比RocketMQ高以及它们之间的区别进行深入探讨。
85 1
|
1月前
|
消息中间件 数据采集 数据库
小说爬虫-03 爬取章节的详细内容并保存 将章节URL推送至RabbitMQ Scrapy消费MQ 对数据进行爬取后写入SQLite
小说爬虫-03 爬取章节的详细内容并保存 将章节URL推送至RabbitMQ Scrapy消费MQ 对数据进行爬取后写入SQLite
27 1
|
30天前
|
消息中间件 中间件 Kafka
解锁Kafka等消息队列中间件的测试之道
在这个数字化时代,分布式系统和消息队列中间件(如Kafka、RabbitMQ)已成为日常工作的核心组件。本次公开课由前字节跳动资深专家KK老师主讲,深入解析消息队列的基本原理、架构及测试要点,涵盖功能、性能、可靠性、安全性和兼容性测试,并探讨其主要应用场景,如应用解耦、异步处理和限流削峰。课程最后设有互动答疑环节,助你全面掌握消息队列的测试方法。
|
1月前
|
消息中间件 JSON Java
开发者如何使用轻量消息队列MNS
【10月更文挑战第19天】开发者如何使用轻量消息队列MNS
76 4
下一篇
无影云桌面