RocketMQ生产环境常见问题分析与总结

RocketMQ生产环境常见问题分析与总结

image.png

如何保证消息不丢失

  • 消息丢失场景
    • 对于跨网络的节点可能会丢消息,因为MQ存盘都会先写入OS的PageCache中,然后再让OS进行异步刷盘,如果缓存中的数据未及时写入硬盘就会导致消息丢失
      • 生产端到Broker端
      • Broker端主从同步
      • Broker端到消费端
  • 消息零丢失方案
    • 生产端使用事务机制
      • 当生产端将消息发送到Broker端,Broker端持久化之后会给生产端进行反馈,此时的消息处于半事务消息,生产端执行本地事务根据执行结果向Broker端提交二次确认来判断是否提交以及回滚,此时如果生产端出现故障,Broker端未收到二次确认,会通过回查机制进行生产端实例回查,生产端收到回查后会继续向Broker端进行二次确认
    • 同步刷盘以及P2C两阶段提交(与ZAB机制类似)保证MQ主从同步时不会丢消息(同步刷盘 + Dledger主从架构)
      • 同步刷盘
      • P2C两阶段提交
        • 基于Raft协议完成
          • leader收到的消息会被标记为未提交然后同步给其它follower,follower收到消息后向leader反馈,当leader收到过半的follower的反馈之后才会将消息标记为已提交并且同步给其它follower
    • 消费者端不要使用异步消费机制
      • 在同步消费情况下,消费完消息之后再去给Broker端反馈,然后Broker端会去维护消息偏移量,如果消费失败可以进行一定次数的重试
      • 在异步消费情况下,消费完消息的同时也会向Broker端反馈,然后Broker端会去维护消息偏移量,如果处理失败了,不会进行重试因为偏移量已经变更
    • MQ服务端挂了采用降级方案(必须有)
      • RocketMQ特有的问题,NameServer挂了如何保证消息不丢失
        • NameServer在RocketMQ中扮演路由中心的角色,提供Broker的路由功能,所有MQ都需要路由中心的功能
          • 在Kafka中使用ZK和作为核心控制器的Broker一起来提供路由服务
          • 在RabbitMQ中是由每一个Broker来提供路由服务的
          • 在RockertMQ中单独抽取服务作为路由中心
        • 对于RocketMQ来说,NameServer挂了,本身就无法保证消息不丢失了,所以应对这种场景,我们可以使用服务降级方案,将消息暂存到Redis、文件或内存中,等MQ服务恢复之后再将消息转移过去

如何保证消息有序

  • MQ的顺序包含局部有序和全局有序

    • 局部有序:(只保证一部分消息链路消费有序)

      • 生产端可以通过消息选择器指定发送到某个MessageQueue,从而保证局部有序
    • 全局有序:(整个消息链路严格按照先进先出的顺序进行消费)

      • 要保证全局有序就必须牺牲吞吐量,也就是一个topic只能有一个MessageQueue被消费(默认4个),可以通过锁队列的方式进行消费,保证全局有序

如何快速处理积压消息

  • 对于Kafka和RocketMQ消息积压并不会对性能有太大的影响,但是对于RabbitMQ就会导致性能直线下降

  • 如何确定RocketMQ有大量的消息积压

    • 对于RocketMQ可以通过控制台查看消息的积压情况
  • 如何处理大量积压的消息

    • 通过增加消费者去加快消费
      • 如果Topic下的MessageQueue配置充足,那每个消费者会分配多个MessageQueue进行消费,所以可以增加消费者数加快消息消费,
      • 如果消费者数 = MessageQueue数,此时增加额外的消费者效果是没有的,此时可以通过新建一个新的Topic配置足够的MessageQueue,将旧Topic中的消息转移到新Topic中,并且指定对应数量的消费者去平摊新Topic的MessageQueue去进行消费,之后再根据情况恢复原有情况
        • Topic_A -> Consumer_A => Topic_A -> Consumer_A -> Topic_B -> Consumer_B

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis总结--传参二

#叫做占位符 Mybatis是封装的JDBC 增强版 内部还是用的jdbc 每遇到一个#号 这里就会变为?占位符 一个#{}就是对应一个问号 一个占位符 用这个对象执行sql语句没有sql注入的风险 八、多个参数-使用Param 当 Dao 接口方法有多个参数,需要通过名称使…

获取图片的颜色的RGB

shiftwins获取截图 然后打开画图软件,ctrlv 然后用吸管工具,吸取 然后编辑颜色,就有

【群智能算法转让】一种新的群智能算法||一种超越隐喻的元启发算法||一种基于数学的群智能算法

1、简介 本次全新出推出一个新的基于种群的元启发算法,基于数学中求解非线性方程组的基本思想而开发的,性能不错 新算法转让Q1 top级(一种基于数学的超越隐喻的元启发式算法) 新的群智能算法转让,新的元启发式算法转…

NATS学习笔记(一)

NATS是什么? NATS是一个开源的、轻量级、高性能的消息传递系统,它基于发布/订阅模式,由Apcera公司开发和维护。 NATS的功能 发布/订阅:NATS的核心是一个发布/订阅消息传递系统,允许消息生产者发布消息到特定的主题…

RAG中如何解决上下文知识连贯性问题 || 如何更好的切分和组织非结构化的文档数据

当信息蕴含在较长的上下文时,基于片段的搜索召回,一定会丢失数据,导致最终无法正确的回答问题。 实际上复杂的问题,这里只是说问题本身倾向于从全文获取答案,而不仅仅是基于片段。 斯坦福论文提出的核心问题和解决思路…

抖店创业者必看!2024年开店营业执照的类型有哪些?开哪个类型?

大家好,我是电商花花。 最近还是有不少人问花花做抖音小店要营业执照吗?个人店可以吗? 目前开抖音小店主要有个人店、个体工商户、企业店这三种店铺类型。 今天来给大家说一下做抖音小店都有什么类型,以及都有什么区别&#xf…

MacOs 围炉夜话

文章目录 一、安装 Mac 一、安装 Mac macOS是一套由苹果开发的运行于Macintosh系列电脑上的操作系统。macOS是首个在商用领域成功的图形用户界面操作系统。 VM虚拟机怎么安装mac os?(全教程) 虚拟机:VMware Workstation 17 pro W…

企业微信应用开发:使用Cpolar域名配置进行本地接口回调的调试指南

文章目录 1. Windows安装Cpolar2. 创建Cpolar域名3. 创建企业微信应用4. 定义回调本地接口5. 回调和可信域名接口校验6. 设置固定Cpolar域名7. 使用固定域名校验 企业微信开发者在应用的开发测试阶段,应用服务通常是部署在开发环境,在有数据回调的开发场…

【蓝桥备赛】字串简写

字串简写 数据范围 字符串的长度为5*10的五次方,on方时间复杂度会很大。 才用动态规划的思想,dp[i]以i开头的的可能性,因为长度必须大于等于k,当i小于k的时候,如果等于第一个字符,s1时,dp[…

图像压缩感知的MATLAB实现(OMP)

前面实现了 压缩感知的图像仿真(MATLAB源代码) 效果还不错,缺点是速度慢如牛。 下面我们采用OMP对其进行优化,提升速度。具体代码如下: 仿真 构建了一个MATLAB文件,所有代码都在一个源文件里面&#xf…

系统保护规则(Sentinel)

系统保护规则 CPU使用率 设置 为了方便产生现象, 设置了使用率朝贡国10% 就触发保护 效果 入口QPS 设置 针对 所有接口的平均 QPS 阈值 效果 访问次数很多的情况下,即可出现

英文输入法(C 语言)

题目 主管期望你来实现英文输入法单词联想功能,需求如下: 依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词。按字典序输出联想到的单词序列,如果联想不到,请输出用户输入的单词前缀。 注意 英…

【鸿蒙开发】第十四章 Stage模型应用组件-任务Mission

1 任务(Mission)管理场景 任务(Mission)管理相关的基本概念如下: AbilityRecord:系统服务侧管理一个UIAbility实例的最小单元,对应一个应用侧的UIAbility组件实例。系统服务侧管理UIAbility实例数量上限为512个。 Mi…

Python实战: 获取 后缀名(扩展名) 或 文件名

Python实战: 获取 后缀名(扩展名) 或 文件名 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程 👈 希望得到您的订阅和支持~ &…

【大厂AI课学习笔记NO.52】2.3深度学习开发任务实例(5)需求采集考虑维度

今天来学习,怎么做需求分析,如何明确数据采集需求。 我把自己考试通过的学习笔记,都分享到这里了,另外还有一个比较全的思维脑图,我导出为JPG文件了。下载地址在这里:https://download.csdn.net/download/g…

《Linux C编程实战》笔记:信号量

信号量在操作系统的书里一般都有介绍,这里就只写书上说的了。 信号量是一个计数器,常用于处理进程或线程的同步问题,特别是对临界资源访问的同步。临界资源可以简单地理解为在某一时刻只能由一个进程或线程进行操作的资源,这里的…

FairyGUI × Cocos Creator 3.x 使用方式

前言 上一篇文章 FariyGUI Cocos Creator 入门 简单介绍了FairyGUI,并且按照官方demo成功在Cocos Creator2.4.0上运行起来了。 当我今天使用Creator 3.x 再引入2.x的Lib时,发现出现了报错。 这篇文章将介绍如何在Creator 3.x上使用fgui。 引入 首先&…

EarMaster Pro 7 简体中文破解版下载 v7.2.0.42 电脑版

软件介绍 EarMaster Pro 简体中文破解版是一款由丹麦皇家音乐学院官方制作的多功能音乐品鉴教育软件,软件具有丰富的功能,它可以自定义培训课程,针对性地训练音准、节奏、和声等音乐要素,用户可以根据自身需求和水平选择不同难度…

Minimize Inversions

先来看看官方题解的做法,他一反常态的没有在逆序对题目里面考虑每个位置的贡献,而是直接回到定义考虑每对数是否是逆序对 我们考虑原数列中任意的一组数\((a_i,a_j)\)和\((b_i,b_j)\)。如果最开始两个都不是逆序对,那么交换之后两个都是逆序对…

RabbitMQ的死信队列和延迟队列

文章目录 死信队列如何配置死信队列死信队列的应用场景Spring Boot实现RabbitMQ的死信队列 延迟队列方案优劣:延迟队列的实现有两种方式: 死信队列 1)“死信”是RabbitMQ中的一种消息机制。 2)消息变成死信,可能是由于…
最新文章