首页 > 其他分享 >MQ消息乱序问题解析与实战解决方案

MQ消息乱序问题解析与实战解决方案

时间:2024-12-06 10:22:22浏览次数:3  
标签:顺序 解决方案 系统 MQ 消息 数据 乱序

1. 背景

在分布式系统中,消息队列(MQ)是实现系统解耦、异步通信的重要工具。然而,MQ消费时出现的消息乱序问题,经常会对业务逻辑的正确执行和系统稳定性产生不良影响。本文将详细探讨MQ消息乱序问题的根源,并提供一系列在实际应用中可行的解决方案。

2. MQ消息乱序问题分析

常见的MQ消息乱序问题的根源主要可以归结为以下几点:

2.1 相同topic内的消息乱序

1). 并发消费:

在分布式系统中,为了提高消息处理的吞吐量,通常会配置多个消费者实例来并发消费同一个队列中的消息。然而,由于消费者实例的机器性能、网络延迟以及处理速度的差异,可能导致消息的消费顺序与发送顺序不一致。

2). 消息分区:

为了支持更高效的消息存储和消费,MQ系统通常会采用分区化的设计。然而,当同一业务逻辑的多条消息被分发到不同的分区时,消费者在消费这些消息时就可能出现乱序现象。

3). 网络延迟与抖动:

消息在传输过程中可能会受到网络延迟和抖动的影响,导致消息到达消费者端的时间顺序与发送顺序不一致。

4). 消息重试与故障恢复:

当消费者处理消息失败或出现故障时,MQ系统通常会进行消息重试或故障恢复操作。如果重试机制或故障恢复策略设计不当,也可能导致消息乱序。

2.2 不同topic的消息乱序

从相对时间的视角来审视,消息被消费的顺序并不等同于其被发送的顺序。例如,系统A在12:00时向TopicA发送了消息msgA-12:00,而紧接着系统B在12:01时向TopicB发送了消息msgB-12:01。当系统C同时订阅并消费这两个Topic时,它无法预设msgA-12:00会必然先于msgB-12:01被接收。这是由于消息系统在处理过程中,受到诸如消息分区策略、各个Consumer的处理能力以及其诸如网络、堆积、重试等他综合因素的影响,导致无法确保消息遵循严格的先进先出原则。

3. 案例分析

3.1 数据迁移过程中的mq消费乱序场景

在数据迁移或同步过程中,尤其是双写场景(即数据既写入旧系统,又通过MQ发送到新系统进行异步处理),MQ乱序可能导致严重的数据不一致问题。

 


 

具体来说,当数据写入时发送INSERT MQ,数据更新时发送UPDATE MQ,如果UPDATE MQ先于INSERT MQ到达目标系统,目标系统可能会基于一个不存在的数据记录进行更新操作。这会导致以下几种情况:

数据丢失:如果目标系统没有处理UPDATE MQ中提到的数据记录(因为该记录尚未通过INSERT MQ创建),则更新操作会失败,可能导致数据变更丢失或遗漏。

数据覆盖:在高频修改的情况下,频繁更新可能会面临旧数据覆盖新数据的风险,比如UPDATE MQ携带的是旧数据且先于新数据的UPDATE MQ到达。

3.2 业务风险分析

MQ乱序对数据迁移和同步过程的影响是深远的:

数据一致性受损:最直接的影响是数据一致性受损。目标系统中的数据可能与源系统不一致,导致业务决策基于错误的数据。

用户体验下降:数据不一致可能导致用户看到错误的信息或遇到功能故障,从而降低用户体验。

业务中断:在严重的情况下,数据不一致可能导致业务中断或系统故障,影响企业的运营和声誉。

4. 解决方案

为了解决这个问题,可以采取以下措施:

4.1 顺序消息

消息顺序性保证:虽然Kafka不保证全局消息顺序,但可以通过合理的分区策略和消息键来确保同一账单的消息被发送到同一个分区,从而在一定程度上保证消息的顺序性。

比如RocketMQ支持顺序消息。但是需要注意这是局部有序,非全局后续。具体实现过程:

1.发送mq消息时,通过selector将同一个业务主键的消息,发送到同一队列中

2.消费方使用MessageListenerOrderly消费局部有序的消息

该方案需要发送方和消费方同步改造。

生产侧:

 


 

消费侧:

 


 

 

4.2 前置检测

•在消费者处理消息之前,进行前置条件检查。例如,可以查询一个消息辅助表,确保上一个消息已经被成功消费或存入死信队列中。这种检查可以确保消息按照正确的顺序被处理。 •另一种方法是,在消息中添加序列号或时间戳,并在消费者端进行验证。如果当前消息的序列号或时间戳不符合预期顺序,则暂停处理并等待正确的消息到达。

4.3 状态机

在消息处理系统中,状态机可以用来定义和处理消息的顺序。每个状态代表系统当前所处的特定条件或阶段,而状态之间的转换则是由接收到的消息触发的。当系统接收到一个消息时,它会检查当前的状态和消息类型,然后决定是否要转移到另一个状态并执行相应的动作。

对于消息乱序问题,状态机可以通过以下方式解决:

1.定义状态转换规则:首先,需要定义一套明确的状态转换规则。这些规则应该基于业务逻辑来确定,以确保消息按照正确的顺序被处理。例如,如果系统要求先处理事件A再处理事件B,那么状态机就应该在接收到事件A后转移到能够处理事件B的状态。 2.状态检查与消息缓存:当系统接收到一个消息时,它会检查当前的状态是否允许处理该消息。如果当前状态不允许处理该消息(即消息的顺序不正确),则可以将该消息缓存起来,等待状态机转移到正确的状态后再进行处理。 3.状态转移与消息处理:一旦状态机转移到正确的状态,它就可以处理缓存中的消息。这可以确保消息按照正确的顺序被处理,即使它们最初是以乱序到达的。

4.4 监控与报警

建立系统的监控和报警机制,及时发现并处理消息错乱等异常情况。

通过采取以上措施,可以大大降低账单还款系统中消息错乱导致的问题,提高系统的稳定性和用户体验。

5. 小结

MQ消息乱序是分布式系统的常见难题,影响系统稳定性和业务一致性。本文深入解析问题根源,探讨了顺序消息、前置检查、状态机等实战解决方案,为实际开发中的问题解决提供有力参考。

文章中难免会有不足之处,希望读者能给予宝贵的意见和建议。谢谢!

 

标签:顺序,解决方案,系统,MQ,消息,数据,乱序
From: https://www.cnblogs.com/Jcloud/p/18590067

相关文章

  • SpringBoot整合RabbitMQ
    RabbitMQ简介消息中间件:它接收消息并且转发,就类似于一个快递站,卖家把快递通过快递站,送到我们的手上,MQ也是这样,接收并存储消息,再转发。RabbitMQ在2007年由Rabbit科技有限公司发布,是一个在AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最主流的消息中间件之......
  • 电商项目-跨域解决方案CORS
    一、什么是跨域出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略......
  • 使用Chocolatey打包MSI软件包的完整解决方案及技术总结
    使用Chocolatey打包MSI软件包的完整解决方案及技术总结在Windows系统上使用Chocolatey管理软件包是一种高效且自动化的方式,尤其是针对MSI格式的软件包。然而,在实际操作中,我们可能会遇到各种问题,例如检测旧版本、卸载旧版本以及处理多个匹配记录等。本文将详细记录从问题发......
  • 使用Redis防止重复发送RabbitMQ消息
    问题今天遇到一个问题,发送MQ消息的时候需要保证不会重复发送,注意不是可靠到达(可靠到达可以通过消息确认机制和回调接口保证),这里保证的是不会生产多条一样的消息。方法综合讨论下来决定使用Redis缓存来解决,因为相比于将记录插入数据库Redis更为高效和便捷。检验是否已经发送在......
  • WRF报错Land Use Dataset ‘‘ not found in VEGPARM.TBL. 解决方案(MATLAB版)
    #WRF模式LandUseDataset''notfoundinVEGPARM.TBL.报错情况最近在使用WRF(-Chem)v4.4.2时,因为需要进行化学场的spinup,涉及到使用之前模拟的结果作为模拟的初始(化学)场,前面real等步骤的执行都无异样,但是正式运行wrf.exe时,很快就出现了停止,查询rsl.erro.0000,出现如下报......
  • 【低代码】低代码平台协同&敏捷场景下的并行开发解决方案探索
    低代码开发平台的出现,大大地提高的产品交付效率,但是在协同开发、敏捷迭代的场景下,也暴露出了一些问题。例如:多人同时对项目进行修改,相互影响甚至修改内容被互相覆盖;同一项目下多个需求同步开发,但需求上线日期不统一,无法拆分上线等等。本文将根据不同诉求,渐进式的讨论......
  • Converge许可分析的挑战和解决方案
    随着企业软件资产的不断增长,许可管理变得越来越复杂,给许多企业带来了不小的挑战。Converge许可分析作为一款强大的工具,不仅能够帮助企业应对这些挑战,还提供了有效的解决方案。本文将探讨Converge许可分析所面临的挑战以及相应的解决方案,为您呈现一个全面而深入的了解。一、挑战:软......
  • 车载打气泵解决方案pcba开发设计
    车载打气泵主要由驱动电机、气压传感器、LED屏幕、控制电路等模块组成,主控电路MCU接收测压信息,控制电机转速,从而调整充气量与充气速度。一键预设功能,接上气嘴后,自动检测胎压情况,充满自动停止,和手动充气相比,省去了繁琐的步骤又节省了体力。产品主要应用场合:主要用于汽车,也可以......
  • 基于国产化鸿道Intewell操作系统的高性能实时运动控制解决方案
    工业自动化控制,需要严苛的实时性、稳定性和安全性。随着全球工业自动化技术的不断进步,高性能实时运动控制已成为智能制造的核心,而现在全球竞争紧张的局势下,国产化技术的应用尤为重要,特别是在关键领域和核心产业中。目前国产化高实时运动控制达到了什么样的控制水平呢?软件+......
  • 解读 110页 大型集团IT治理体系规划详细解决方案可编辑PPT
    该文档是大型集团IT治理体系规划详细解决方案,涵盖信息化蓝图架构、管控体系规划、治理规划方法论、IT治理目标体系架构设计、IT运维及演进规划等内容,旨在助力集团构建完善、高效且适应发展需求的IT治理体系,以下是详细总结:###信息化蓝图架构与管控体系规划1.信息化蓝图架构......