热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

文章目录前言侧重点架构模型消息通讯其他对比总结参考文档前言不论Kafka还是RabbitMQ和RocketMQ,作为消息中间件,其作用为应用解耦、异步


文章目录


  • 前言
  • 侧重点
  • 架构模型
  • 消息通讯
  • 其他对比
  • 总结
  • 参考文档



前言

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


侧重点

每个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就可以。


参考文档

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







推荐阅读
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
  • RabbitMQ是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP,SMTP,STOMP,也 ... [详细]
  • Java自学知乎!阿里高级算法专家公开10份资料,涨姿势!
    接口概述:接口是Java语言中的一种引用类型,是方法的集合,所以接口的内部主要就是定义方法,包含常量,抽象方法(JDK ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • 在 CentOS 7 上部署和配置 RabbitMQ 消息队列系统时,首先需要安装 Erlang,因为 RabbitMQ 是基于 Erlang 语言开发的。具体步骤包括:安装必要的依赖项,下载 Erlang 源码包(可能需要一些时间,请耐心等待),解压源码包,解决可能出现的错误,验证安装是否成功,并将 Erlang 添加到环境变量中。接下来,下载 RabbitMQ 的 tar.xz 压缩包,并进行解压和安装。确保每一步都按顺序执行,以保证系统的稳定性和可靠性。 ... [详细]
  • 一文了解消息中间件RabbitMQ
    消息中间件---RabbitMQ1消息中间件的作用2.常用的消息中间件3消息中间件RabbitMQ3.1RabbitMQ介绍3.3RabbitMQ的队列模式3.3RabbitMQ的 ... [详细]
  • .Net下RabbitMQ发布订阅模式实践
    一、概念AMQP,即AdvancedMessageQueuingProtocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的 ... [详细]
  • 分布式消息系统之Kafka集群部署
    kafka是基于发布订阅模式的一个分布式消息队列系统,用java语言研发,是ASF旗下的一个开源项目;类似的消息队列服务还有rabbitmq、activemq、zeromq;kaf ... [详细]
  • RabbitMQ之队列与消息持久化
    队列持久化在之前的例子中,我们所用的队列都是临时队列,当服务重启后之前创建的队列就都没有了。队列的持久化是在定义队列时的第二个参数决定的(false为队列不用持久化)channel.queueDecl ... [详细]
  • Kafka 是由 Apache 软件基金会开发的高性能分布式消息系统,支持高吞吐量的发布和订阅功能,主要使用 Scala 和 Java 编写。本文将深入解析 Kafka 的安装与配置过程,为程序员提供详尽的操作指南,涵盖从环境准备到集群搭建的每一个关键步骤。 ... [详细]
  • 如何精通编程语言:全面指南与实用技巧
    如何精通编程语言:全面指南与实用技巧 ... [详细]
  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
  • 当前,众多初创企业对全栈工程师的需求日益增长,但市场中却存在大量所谓的“伪全栈工程师”,尤其是那些仅掌握了Node.js技能的前端开发人员。本文旨在深入探讨全栈工程师在现代技术生态中的真实角色与价值,澄清对这一角色的误解,并强调真正的全栈工程师应具备全面的技术栈和综合解决问题的能力。 ... [详细]
  • 本文深入探讨了 C# 中 `SqlCommand` 和 `SqlDataAdapter` 的核心差异及其应用场景。`SqlCommand` 主要用于执行单一的 SQL 命令,并通过 `DataReader` 获取结果,具有较高的执行效率,但灵活性较低。相比之下,`SqlDataAdapter` 则适用于复杂的数据操作,通过 `DataSet` 提供了更多的数据处理功能,如数据填充、更新和批量操作,更适合需要频繁数据交互的场景。 ... [详细]
author-avatar
哇哈哈
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有