浅谈一下RabbitMQ、Kafka和RocketMQ消息中间件对比

 更新时间:2023年05月20日 09:11:55   作者:叫我二蛋  
这篇文章主要介绍了浅谈一下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本身支持延迟消息、事务消息等,功能比较丰富。

其他对比

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

总结

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

到此这篇关于浅谈一下RabbitMQ、Kafka和RocketMQ消息中间件对比的文章就介绍到这了,更多相关RabbitMQ、Kafka和RocketMQ对比内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 确保SpringBoot定时任务只执行一次的常见方法小结

    确保SpringBoot定时任务只执行一次的常见方法小结

    在Spring Boot项目中,确保定时任务只执行一次是一个常见的需求,这种需求可以通过多种方式来实现,以下是一些常见的方法,它们各具特点,可以根据项目的实际需求来选择最合适的方法,需要的朋友可以参考下
    2024-10-10
  • 如何为Logback日志添加唯一追踪ID

    如何为Logback日志添加唯一追踪ID

    本文介绍了如何为Logback日志添加唯一追踪ID,以便在测试和调试时更容易定位报错信息,通过创建过滤器和修改配置文件,可以在每个请求的日志中添加唯一的ID,并将其返回给前端,这样,当用户反馈报错时,开发人员可以根据ID快速定位和解决问题
    2024-12-12
  • Spring MVC 中拦截器的使用示例详解"拦截器基本配置"和 "拦截器高级配置"

    Spring MVC 中拦截器的使用示例详解"拦截器基本配置"和 &q

    Spring MVC 的拦截器作用是在请求到达控制器之前或之后进行拦截,可以对请求和响应进行一些特定的处理,这篇文章主要介绍了Spring MVC 中的拦截器的使用“拦截器基本配置” 和 “拦截器高级配置”,需要的朋友可以参考下
    2024-07-07
  • SpringSecurity实现登陆认证并返回token方式

    SpringSecurity实现登陆认证并返回token方式

    这篇文章主要介绍了SpringSecurity实现登陆认证并返回token方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • Java数据结构之图的领接矩阵详解

    Java数据结构之图的领接矩阵详解

    图的领接矩阵存储方式是用两个数组来表示图。一个一位数组存储图中顶点信息,一个二维数组存储图中的边或弧的信息。本文将为大家重点介绍一下数据结构中的图的邻接矩阵,快来跟随小编一起学习吧
    2021-11-11
  • 使用SpringBoot注解方式处理事务回滚实现

    使用SpringBoot注解方式处理事务回滚实现

    这篇文章主要介绍了使用SpringBoot注解方式处理事务回滚实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • idea热部署且开启自动编译的实现方法

    idea热部署且开启自动编译的实现方法

    这篇文章主要介绍了idea热部署且开启自动编译的实现方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Spring cloud OpenFeign中动态URl、动态传递接口地址代码示例

    Spring cloud OpenFeign中动态URl、动态传递接口地址代码示例

    openFeign是作为微服务之间调用的解决方案,每个微服务项目是必不可少的,下面这篇文章主要给大家介绍了关于Spring cloud OpenFeign中动态URl、动态传递接口地址的相关资料,需要的朋友可以参考下
    2024-02-02
  • 基于Properties实现配置数据库驱动

    基于Properties实现配置数据库驱动

    这篇文章主要介绍了基于Properties实现配置数据库驱动,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Java实现WORD和PDF互相转换以及数据填充示例

    Java实现WORD和PDF互相转换以及数据填充示例

    本文介绍了如何使用Java实现WORD和PDF的互转以及数据填充功能,通过导入Aspose库并使用其工具类,可以轻松实现WORD和PDF模板的填充和转换,需要的朋友可以参考下
    2025-02-02

最新评论