Rocketmq 入门介绍

从零手写实现 mq

详细介绍一下 rocketmq

RocketMQ 是由阿里巴巴开发的分布式消息队列系统,它是一个低延迟、高可靠、高吞吐量的消息中间件。

RocketMQ 最初是作为阿里巴巴的内部项目进行开发的,后来成为了 Apache 软件基金会下的顶级项目,以 Apache 许可证 2.0 发布,使其成为一个开放、免费的开源项目。

以下是 RocketMQ 的一些主要特性:

  1. 分布式架构:RocketMQ 是基于分布式架构设计的,可以轻松地实现水平扩展以满足高吞吐量和大规模部署的需求。它支持多个消息队列服务器(Broker)和多个消息消费者,以实现负载均衡和高可用性。

  2. 高可靠性:RocketMQ 提供了严格的消息传递保证,包括顺序消息、事务消息、消息重试等机制,确保消息不会丢失。它使用主从复制和同步刷盘等技术来保证消息的可靠性。

  3. 高吞吐量:RocketMQ 在设计上注重了高吞吐量的目标,通过优化网络通信、存储和消息处理等方面的性能,实现了非常高的消息处理速度。

  4. 低延迟:RocketMQ 的设计追求低延迟,能够快速地将消息传递给消费者,并且支持优先级消息以及批量发送等特性,进一步降低了消息传递的延迟。

  5. 灵活的消息模型:RocketMQ 支持多种消息模型,包括点对点(P2P)模型和发布/订阅(Pub/Sub)模型,可以满足不同场景下的需求。

  6. 丰富的功能:RocketMQ 提供了丰富的功能和特性,包括消息过滤、延迟消息、定时消息、事务消息等,可以满足各种复杂的业务场景需求。

  7. 可扩展性:RocketMQ 提供了丰富的插件和扩展接口,可以方便地进行定制化开发和扩展,以满足特定业务需求。

RocketMQ 是一个功能丰富、稳定可靠、性能优异的分布式消息队列系统,广泛应用于互联网、物联网、大数据等领域,为企业提供了可靠的消息通信基础设施。

为什么要用 rocketmq 呢?和 kafka/rabbitmq/activemq 等对比有哪些优缺点?

使用 RocketMQ 的原因可以有很多,具体取决于你的业务需求、技术栈以及团队的偏好。

以下是使用 RocketMQ 的一些常见原因以及与其他消息队列系统(如 Kafka、RabbitMQ 和 ActiveMQ)进行对比的优缺点:

为什么要使用 RocketMQ?

  1. 高可靠性和稳定性:RocketMQ 提供了主从复制、同步刷盘等机制,确保消息不会丢失,能够满足对消息传递可靠性要求较高的场景。

  2. 低延迟:RocketMQ 追求低延迟的设计目标,能够快速地将消息传递给消费者,适用于对延迟要求较高的业务场景。

  3. 高吞吐量:RocketMQ 通过优化网络通信、存储和消息处理等方面的性能,实现了非常高的消息处理速度,适用于需要处理大量消息的场景。

  4. 丰富的功能:RocketMQ 提供了丰富的功能和特性,如消息过滤、延迟消息、定时消息、事务消息等,可以满足各种复杂的业务场景需求。

  5. Apache 开源项目:RocketMQ 是 Apache 软件基金会下的顶级项目,具有开放、免费、社区活跃等特点,受到了广泛的关注和支持。

与其他消息队列系统的对比优缺点:

  1. 与 Kafka 对比

    • 优点:Kafka 在大数据领域有很高的知名度和使用率,适用于大规模数据处理和实时分析等场景。
    • 缺点:相比 Kafka,RocketMQ 更加注重消息传递的可靠性和稳定性,对于一些对消息可靠性要求更高的场景可能更适合使用 RocketMQ。
  2. 与 RabbitMQ 对比

    • 优点:RabbitMQ 在 AMQP(高级消息队列协议)的支持上更加全面,适用于复杂的消息传递场景,如分布式事务、消息确认等。
    • 缺点:相比 RabbitMQ,RocketMQ 在分布式部署和水平扩展方面更加灵活和简单,适用于高并发、大规模的消息传递场景。
  3. 与 ActiveMQ 对比

    • 优点:ActiveMQ 是一个成熟的 JMS(Java 消息服务)实现,提供了丰富的功能和协议支持,适用于 Java 生态系统中的消息传递场景。
    • 缺点:相比 ActiveMQ,RocketMQ 更加轻量级和高性能,适用于对消息传递性能和稳定性要求较高的场景。

rocketmq 是如何保证消息不丢失的?

RocketMQ 通过多种机制来确保消息不会丢失,主要包括以下几点:

  1. 同步刷盘:RocketMQ 在写入消息时采用同步刷盘的方式,即消息写入磁盘后会立即返回确认,确保消息已经被持久化到磁盘。这样即使在发生服务器宕机等异常情况时,已经持久化到磁盘的消息不会丢失。

  2. 主从复制:RocketMQ 支持主从复制机制,即一个主节点(Master)可以配置多个从节点(Slave)。当主节点宕机时,RocketMQ 会自动选举其中一个从节点作为新的主节点,从而保证消息队列的可用性和数据不丢失。

  3. 数据预写日志(WAL):RocketMQ 使用预写日志(Write-Ahead Logging)来记录消息的变更操作,确保即使在消息写入磁盘过程中出现异常,可以通过重放预写日志来恢复数据,从而避免消息丢失。

  4. 消息复制和同步:RocketMQ 在消息发送过程中会将消息复制到多个 Broker 节点上,以实现消息的备份和冗余,从而提高消息的可靠性和可用性。同时,RocketMQ 会在 Broker 之间进行消息同步,确保消息在不同节点之间的一致性。

  5. 消息确认机制:RocketMQ 提供了消息发送确认机制,即生产者发送消息后会等待 Broker 的确认响应,确保消息已经被成功存储。只有当 Broker 返回确认响应后,生产者才会认为消息已经安全发送,从而避免消息丢失。

综合利用以上的机制,RocketMQ 能够有效地保证消息不会丢失,并且具有较高的可靠性和稳定性,适用于各种对消息传递可靠性要求较高的场景。

rocketmq 又是如何保证低延迟,高吞吐量的呢、

RocketMQ 通过一系列的设计和机制来保证消息不丢失、低延迟和高吞吐量。

下面我将详细解释:

1. 消息存储机制:

  • RocketMQ 使用了类似于日志的存储方式,将消息持久化存储在磁盘上,以保证即使在服务重启或者宕机后,消息仍然不会丢失。这种存储方式也能够保证消息的顺序性。

2. 主从复制机制:

  • RocketMQ 支持主从复制机制,即每个主题的消息会在多个 Broker 节点上进行同步复制。当主节点宕机或者发生故障时,可以快速切换到备用节点,确保消息的可靠性和高可用性。

3. 同步刷盘机制:

  • RocketMQ 提供了同步刷盘机制,即生产者在发送消息后会等待消息被同步写入磁盘之后才返回成功响应,确保消息不会因为写入内存而丢失。

4. 消息确认机制:

  • RocketMQ 提供了消息确认机制,生产者发送消息后会等待消费者确认消息已经成功消费,如果消费者没有确认,则会进行消息重试,直到消息被确认消费或者达到最大重试次数。

5. 优化网络通信和存储性能:

  • RocketMQ 对网络通信和存储进行了优化,采用了零拷贝技术和顺序写入磁盘等方法,提高了消息传输和存储的效率,从而降低了延迟和提升了吞吐量。

6. 分布式架构和负载均衡:

  • RocketMQ 采用了分布式架构,并且支持多个 Broker 节点,可以根据负载情况进行动态调整,确保消息能够快速被路由到可用的节点进行处理,提高了系统的吞吐量和性能。

7. 异步消息发送和批量发送:

  • RocketMQ 支持异步消息发送和批量发送,生产者可以将多个消息打包发送,减少了网络通信的开销,提高了消息的传输效率和吞吐量。

8. 优先级消息和快速失败机制:

  • RocketMQ 支持优先级消息和快速失败机制,可以根据消息的优先级进行排序和处理,确保重要消息能够优先得到处理,并且在消费者处理失败时能够快速进行失败处理,降低了延迟。

RocketMQ 通过多种机制和优化手段,包括消息存储、复制机制、同步刷盘、消息确认、网络通信和存储性能优化等,来保证消息不丢失、低延迟和高吞吐量,从而满足不同业务场景下的需求。

rocketmq 如何保证消息消费的顺序性?

RocketMQ 通过一系列的设计和机制来保证消息消费的顺序性,主要包括以下几个方面:

  1. 队列和分区机制

    • RocketMQ 中的每个主题(Topic)都可以包含多个队列(Queue),而每个队列可以在不同的 Broker 节点上,这样可以通过调整队列数量和分配来达到消息的有序性。在发送消息时,生产者可以选择将消息发送到指定的队列,从而确保一组相关消息被顺序地存储在同一个队列中。
  2. 生产者发送顺序消息

    • RocketMQ 提供了发送顺序消息的功能,生产者可以在发送消息时指定消息的顺序关键字,RocketMQ 根据这个关键字将消息发送到同一个队列中,从而确保一组相关消息被顺序地发送到 Broker。
  3. 消费者按顺序消费

    • RocketMQ 提供了一种叫做顺序消费的方式,消费者可以通过设置消息消费的方式为顺序消费,这样消费者在处理消息时会按照消息的顺序进行消费,从而确保消息的顺序性。
  4. 消息队列锁机制

    • RocketMQ 提供了一种叫做顺序消息队列锁(Orderly Message Queue Lock)的机制,在顺序消费模式下,会使用队列锁来确保同一队列的消息不会被多个消费者并发消费,从而保证了消息的顺序性。
  5. 消费者分组机制

    • RocketMQ 的消费者可以通过消费者分组(Consumer Group)来进行负载均衡和水平扩展,同一个消费者分组内的消费者会均衡地消费消息,而不同分组的消费者则可以并行消费消息,这样可以确保不同分组内的消息消费是有序的。

综上所述,RocketMQ 通过队列和分区机制、顺序消息发送、顺序消费、消息队列锁机制和消费者分组等方式来保证消息消费的顺序性,从而满足了对消息顺序性要求较高的业务场景。

本文由博客一文多发平台 OpenWrite 发布!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/711621.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

精读《React 高阶组件》

本期精读文章是:React Higher Order Components in depth 1 引言 高阶组件( higher-order component ,HOC )是 React 中复用组件逻辑的一种进阶技巧。它本身并不是 React 的 API,而是一种 React 组件的设计理念&…

【QT+QGIS跨平台编译】之五十三:【QGIS_CORE跨平台编译】—【qgssqlstatementparser.cpp生成】

文章目录 一、Bison二、生成来源三、构建过程一、Bison GNU Bison 是一个通用的解析器生成器,它可以将注释的无上下文语法转换为使用 LALR (1) 解析表的确定性 LR 或广义 LR (GLR) 解析器。Bison 还可以生成 IELR (1) 或规范 LR (1) 解析表。一旦您熟练使用 Bison,您可以使用…

transformers文本相似度

在自然语言处理(NLP)中,文本相似度是衡量两个文本之间语义或结构相似程度的一个重要概念。计算文本相似度的方法多种多样,适应不同的应用场景和需求。以下是一些常见的文本相似度计算方法: 1、余弦相似度: 通过将文本转换为向量表示(例如,使用词袋模型、TF-IDF 或 wor…

2024年个人护理赛道选品风向在哪?这份赛盈分销选品攻略必看!

2024年还会卷下去吗?看到一位行业大佬分享的内容深有感触:坚定做好产品,不做大卖,就不存在卷不卷。 有人出局,也会有人入局,并且深耕领域做大做强。 专注口腔护理的Bitvae入行不到两年,凭借一款…

C#学习(十四)——垃圾回收、析构与IDisposable

一、何为GC 数据是存储在内存中的,而内存又分为Stack栈内存和Heap堆内存 Stack栈内存Heap堆内存速度快、效率高结构复杂类型、大小有限制对象只能保存简单的数据引用数据类型基础数据类型、值类型- 举个例子 var c new Customer{id: 123,name: "Jack"…

Java中String类有哪些常用方法?

Java中的String类提供了许多有用的方法,用于处理字符串。以下是一些常用的方法及其简要描述: 1. **charAt(int index)**:返回指定位置的字符。 2. **length()**:返回字符串的长度。 3. **substring(int beginIndex, int endInd…

微信小程序手势冲突?不存在的!

原生的应用经常会有页面嵌套列表,滚动列表能够改变列表大小,然后还能支持列表内下拉刷新等功能。看了很多的小程序好像都没有这个功能,难道这个算是原生独享的吗,难道是由于手势冲突无法实现吗,冷静的思考了一下&#…

Google验证码,扫描绑定,SpringBoot+ vue

文章目录 后端1.使用Google工具类这个 类的 verifyTest 方法可以判断扫描绑定之后的app上面验证码的准确性。这个类通过g_user,g_code(就是谷歌验证器的secret,这个你已经插入到数据库 中)来生成相关二维码。2.用工具类自带的g_user,g_code来生成二维码2.1通过请求来生成相关二…

你知道vector底层是如何实现的吗?

你知道vector底层是如何实现的吗? vector底层使用动态数组来存储元素对象,同时使用size和capacity记录当前元素的数量和当前动态数组的容量。如果持续的push_back(emplace_back)元素,当size大于capacity时,需要开辟一块更大的动态…

【InternLM 实战营笔记】XTuner 大模型单卡低成本微调实战

XTuner概述 一个大语言模型微调工具箱。由 MMRazor 和 MMDeploy 联合开发。 支持的开源LLM (2023.11.01) InternLM Llama,Llama2 ChatGLM2,ChatGLM3 Qwen Baichuan,Baichuan2 Zephyr 特色 傻瓜化: 以 配置文件 的形式封装了大…

WebGIS----wenpack

学习资料:https://webpack.js.org/concepts/ 简介: Webpack 是一个现代化的 JavaScript 应用程序的模块打包工具。它能够将多个 JavaScript 文件和它们的依赖打包成一个单独的文件,以供在网页中使用。 Webpack 还具有编译和转换其他类型文…

自学新标日第六课(单词部分 未完结)

第六课 单词 单词假名声调词义来月らいげつ1下个月先月せんげつ1上个月夜中よなか3午夜昨夜ゆうべ0昨天晚上コンサートこんさーと1音乐会クリスマスくりすます3圣诞季誕生日たんじょうび3生日こどもの日こどものひ5儿童节夏休みなつやすみ3…

看待事物的层与次 | DBA与架构的一次对话交流

前言 在计算机软件业生涯中,想必行内人或多或少都能感受到系统架构设计与数据库系统工程的重要性,也能够清晰地认识到在计算机软件行业中技术工程师这个职业所需要的专业素养和必备技能! 背景 通过自研的数据库监控管理工具,发现 SQL Server 数据库连接数在1-2K之间,想…

Yii2中如何使用scenario场景,使rules按不同运用进行字段验证

Yii2中如何使用scenario场景,使rules按不同运用进行字段验证 当创建news新闻form表单时: 添加新闻的时候执行create动作。 必填字段:title-标题,picture-图片,description-描述。 这时候在model里News.php下rules规则…

星座每日运势 api接口

接口数据api 接口平台&#xff1a;https://api.yuanfenju.com/ 开发文档&#xff1a;https://doc.yuanfenju.com/zhanbu/yunshi.html 支持格式&#xff1a;JSON 请求方式&#xff1a;HTTP POST <?php//您的密钥 $api_secret "wD******XhOUW******pvr"; //请…

利用coze 搭建“全功能“微信客服(2)

紧跟上篇 利用coze 搭建"全功能"微信客服&#xff08;1&#xff09;&#xff0c;不知道来龙去脉自行查阅 先表扬下coze: coze 是国内少数开放平台之一&#xff0c;里面提供各种插件还可以开发工作流&#xff0c;让你可以实现多模态全功能大模型 吐槽 没有API开放接口…

国外最流行的是AI,国内最流行的是AI培训教程

国外最流行的是AI&#xff0c;国内最流行的是AI培训教程。 最近李一舟AI教程事件&#xff0c;验证了这句话。 如今给客户做方案项目里能加点AI色彩&#xff0c;立项的成功率都变大(特别是事业单位)。 正因如此&#xff0c;大家都在狂补AI的知识&#xff0c;不然肚子里没点墨水&…

2024亚马逊全球开店注册前需要准备什么?

在2023年出海四小龙SHEIN、Temu、速卖通AliExpress、TikTok Shop快速增长扩张&#xff0c;成为了中国跨境卖家“逃离亚马逊”的新选择。但是&#xff0c;跨境电商看亚马逊。当前&#xff0c;亚马逊仍然是跨境电商行业的绝对老大&#xff0c;占有将近70%成以上的业务份额。 作为…

threejs显示本地硬盘上的ply文件,通过webapi

由于ply文件是第三方提供的&#xff0c;threejs无法用绝路路径的方式显示ply 所以想通过webapi把ply通过url地址的方式给threejs 1.webapi部分 /// <summary>/// 获取PLY文件/// </summary>/// <returns></returns>[HttpPost(Name "GetPly&qu…

分享fastapi低级错误

我是创建表的时候把__tablename__ 写成__table__然后一直报这个错误