学习小记-RocketMQ的一些小知识

目录

如何保证消息不丢失

如何保证消息顺序消费

如何实现延时消息


如何保证消息不丢失

  1. 消息存储

    • RocketMQ 将消息存储在物理磁盘上,而不是仅仅缓存在内存中。每个消息都被序列化并存储在指定的存储路径中。
  2. 主从复制(Master-Slave Replication):

    • 消息在被发送到 Master 节点后,会被异步复制到 Slave 节点。这样即使 Master 节点发生故障,Slave 节点仍然可以保证消息的完整性。
  3. 刷盘机制

    • 为了确保消息的持久性,RocketMQ 支持同步和异步两种刷盘方式。同步刷盘会等待消息写入磁盘后才返回确认,而异步刷盘则可以提高性能。
  4. 消息确认

    • 消费者在成功处理消息后,需要发送一个确认回执给消息队列。如果消息队列没有收到确认,它会认为消息未被成功处理,并可能重新投递该消息。

RocketMQ没办法100%保证消息不丢失,只能最大限度保证消息称不丢失!

如何保证消息顺序消费

答:三次加锁!

  1. 使用同步发送消息的方式,把消息发送到同一队列中(发送时可以通过参数指定)。
  2. 需要同一个消费者消费(加锁实现-给消费者客户端申请分布式锁<首次加锁>)
  3. 因为消费者消费时是把消息丢到消费线程池多线程消费的,为了保证顺序消费,这里就要再次加锁,确保同事时间内一个队列里只能有一个线程处理该消息<二次加锁>。
  4. 对存储消息的processQueue加锁(解锁时再次加锁),确保重平衡过程中不会出现重复消费。
    1. 当集群新增了消费客户端进来的时候,某个队列可能原来输入A客户端,现在却要经过重平衡交由B客户端消费,这时候假如A客户端正在消费,此时消费结果还没提交,在交接的过程中就需要确保锁不被移除,否则可能其他客户端获取锁后会重复消费(所以就需要在A客户端解锁的时候再次加锁,如果加锁成功才允许解锁)。

顺序消费因为加了很多锁,会降低吞吐量,所以慎重选择。

如何实现延时消息

Rocket5.0版本之前,使用Timer定时器实现,先将消息存储在内存中,达到时间后再存储到磁盘中并且投递给消费者(Timer有缺陷,定时器中任务很多时会导致性能下降)。

Rocket5.0中增加了基于时间轮实现的定时消息,该算法很高效,可在O(1)时间内找到将执行的任务:

  1. 当Broker接收到定时消息时,根据消息的过期时间计算出需要投递的槽位,并将消息放置到对应的槽位中。
  2. 时间轮滴答到该槽位时便会触发事件,将消息投递给消费者

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

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

相关文章

指针!!C语言(第一篇)

指针1 指针变量和地址1.取地址操作符(&)2.指针变量和解引用操作符(*) 指针变量的大小和类型指针的运算特殊指针1.viod*指针2.const修饰指针3.野指针 assert断言指针的使用和传址调用1.strlen的模拟实现2.传值调用和传址调用 指针变量和地址 在认识指针之前&#xff0c;我们…

Iceberg概念和特性

1. 快照 Iceberg会随着时间的推进,跟踪表生命周期中的所有数据集变化,并使用快照(Snapshots)来表示每一次变化后的数据集合,每一次数据操作的事务提交均会产生一个快照,并将其记录在元数据文件(Metadata)中。 基于快照的概念,Iceberg有以下特性: 事务性:写入快照成…

使用 CSS 实现渐变效果

使用 CSS 实现渐变效果 使用 CSS 实现渐变效果非常简单且强大&#xff0c;CSS 提供了两种主要的渐变效果&#xff1a;线性渐变&#xff08;linear gradient&#xff09;和径向渐变&#xff08;radial gradient&#xff09;。下面是如何使用这些渐变效果的详细说明。 1. 线性渐…

Hive中的数据类型和存储格式总结

1.数据类型 Hive 支持多种数据类型&#xff0c;分为原始数据类型和复杂数据类型两类。以下是 Hive 支持的数据类型&#xff1a; 原始数据类型&#xff1a; 1.整数类型&#xff1a; tinyint: 1字节有符号整数 smallint: 2字节有符号整数 int:…

微服务负载均衡的艺术:Eureka中服务实例权重配置全解析

微服务负载均衡的艺术&#xff1a;Eureka中服务实例权重配置全解析 在微服务架构中&#xff0c;服务发现是实现服务间互连的基础&#xff0c;而负载均衡则是确保服务高可用性和响应性的关键。Eureka&#xff0c;作为Netflix开源的服务发现框架&#xff0c;提供了丰富的配置选项…

26.6 Django模型层

1. 模型层 1.1 模型层的作用 模型层(Model Layer)是MVC或MTV架构中的一个核心组成部分, 它主要负责定义和管理应用程序中的数据结构及其行为. 具体职责包括: * 1. 封装数据: 模型层封装了应用程序所需的所有数据, 这些数据以结构化的形式存在, 如数据库表, 对象等. * 2. 数据…

昇思25天学习打卡营第7天 | MindNLP ChatGLM-6B StreamChat

本案例基于MindNLP和ChatGLM-6B实现一个聊天应用。 1 环境配置 %%capture captured_output # 实验环境已经预装了mindspore2.2.14&#xff0c;如需更换mindspore版本&#xff0c;可更改下面mindspore的版本号 !pip uninstall mindspore -y !pip install -i https://pypi.mi…

Log4j的原理及应用详解(一)

本系列文章简介&#xff1a; 在软件开发的广阔领域中&#xff0c;日志记录是一项至关重要的活动。它不仅帮助开发者追踪程序的执行流程&#xff0c;还在问题排查、性能监控以及用户行为分析等方面发挥着不可替代的作用。随着软件系统的日益复杂&#xff0c;对日志管理的需求也日…

前端:Vue学习-1

前端:Vue学习-1 1. 指令1. 指令修饰符2. v-bind对样式控制的增强3. v-model应用于其他表单元素 2. 计算属性3. watch侦听器&#xff08;监视器&#xff09; 1. 指令 就是带有v-前缀的特殊属性&#xff0c;不同属性对应不同的功能 v-html&#xff1a;动态设置页面的html标签内容…

超时导致SparkContext构造失败的问题探究

文章目录 1.前言2. 基于事故现场对问题进行分析2.1 日志分析2.2 单独测试Topology代码试图重现问题 3. 源码解析3.1 Client模式和Cluster模式下客户端的提交和启动过程客户端提交时在两种模式下的处理逻辑ApplicationMaster启动时在两种模式下的处理逻辑 3.2 两种模式下的下层角…

08-8.4.1 简单选择排序+8.4.2 堆排序

&#x1f44b; Hi, I’m Beast Cheng &#x1f440; I’m interested in photography, hiking, landscape… &#x1f331; I’m currently learning python, javascript, kotlin… &#x1f4eb; How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以…

【MySQL】9.表的内外连接

表的内外连接 一.内连接二.外连接1.左外连接2.右外连接 一.内连接 内连接实际上就是利用 where 子句对两张表形成的笛卡尔积进行筛选&#xff0c;前面学习的查询都是内连接&#xff0c;也是使用最多的连接查询 语法&#xff1a; select 字段 from 表1 inner join 表2 on 连接条…

双缓存机制

应用 显卡 显卡包含前置缓冲区与后置缓冲区&#xff0c;如60hz的显示器每秒会从前置缓冲区读取60张图像&#xff0c; 而显卡则是合成图像并写入后置缓冲区&#xff0c;一旦后置缓冲区被写入图像&#xff0c; 前后缓冲区就会互换 react与vue 如react的fiber tree&#xff0…

vue解决页面放大图片模糊的问题

1.页面放大(或者电脑设置了缩放比例,比如125%)&#xff0c;图片模糊 不考虑带宽的情况下&#xff0c;直接请求后端最大尺寸的照片。 2.根据用户电脑的放大倍数或者电脑设置中的放大倍数(DPR)&#xff0c;自动请求合适的照片 3.实现&#xff1a; 记住公式&#xff1a;图片尺…

Adminer-CVE-2021-21311

在其4.0.0到4.7.9版本之间&#xff0c;连接 ElasticSearch 和 ClickHouse 数据库时存在一处服务端请求伪造漏洞&#xff08;SSRF&#xff09;。 VPS开启HTTP服务 VPS 开启HTTP 再同时跑POC 确保能访问poc里的链接文件 第一是目标地址 第二个是跳转地址 第三个是监听地址 如果…

Perl 语言开发(十四):数据库操作

目录 1. 数据库连接 2. 基本数据库操作 2.1 插入数据 2.2 查询数据 2.3 更新数据 2.4 删除数据 3. 高级查询 3.1 多表连接 3.2 子查询 3.3 聚合查询 4. 事务处理 5. 数据库连接池 6. 常见的数据库模块 7. 综合实例 结论 数据库操作是大多数软件系统的核心部分。…

Vue3.js“非原始值”响应式实现基本原理笔记(四)浅响应和深响应、只读和浅只读

如果您觉得这篇文章有帮助的话&#xff01;给个点赞和评论支持下吧&#xff0c;感谢~ 作者&#xff1a;前端小王hs 阿里云社区博客专家/清华大学出版社签约作者/csdn百万访问前端博主/B站千粉前端up主 此篇文章是博主于2022年学习《Vue.js设计与实现》时的笔记整理而来 书籍&a…

为什么大学讲授 C 语言比讲授 C++ 的更多?

大学更倾向于讲授C语言而不是C的几个原因可能包括。我收集归类了一份嵌入式学习包&#xff0c;对于新手而言简直不要太棒&#xff0c;里面包括了新手各个时期的学习方向编程教学、问题视频讲解、毕设800套和语言类教学&#xff0c;敲个22就可以免费获得。 基础性质&#xff1a;…

【Pytorch实战教程】对抗样本生成中是如何添加噪声的?

文章目录 对抗样本中添加随机生成的对抗噪声代码解析应用场景示例代码对抗样本中添加随机生成的对抗噪声 通常在对抗训练或者生成对抗样本时使用,目的是为了稍微扰动模型的输入数据,从而测试或增强模型在面对输入数据轻微变化时的鲁棒性。 x = x + torch.zeros_like(x).uni…

CPTAC蛋白数据库的补充(自备)

目录 关于CPTAC数据库 资料下载 数据分析 相关网站说明:Proteomic Data Commons (cancer.gov) 关于CPTAC数据库 两个基因相关性CPTAC蛋白组数据_cptac分析蛋白表达相关性-CSDN博客 两个基因相关性细胞系(CCLE)(升级)-CSDN博客 CPTAC数据门户是一个集中的存储库,用…