mq消息堆积

  1. 通常情况下,出现消息积压的原因有
    1. mq消费者挂了
    2. mq生产者生产消息的速度,大于mq消费者消费消息的速度
  2. 当数据量不大时,优化消费者处理逻辑
    1. 通过在代码中增加了一些日志,把mq消费者中各个关键节点的耗时都打印出来,发现有两个地方耗时比较长
      1. 有个代码是一个for循环中,一个个查询数据库处理数据的
      2. 有个多条件查询数据的代码
    2. 解决方案:
      1. 将在for循环中一个个查询数据库的代码,改成通过参数集合,批量查询数据
      2. 多条件查询数据的地方,增加了一个联合索引
    3. 这样优化之后,mq消费者处理消息的速度提升了很多,消息积压问题被解决
  3. sql语句执行的where条件是一样的,只有条件后面的参数值不一样,导致sql语句走的索引不一样
    1. 比如:order_id =123走了索引a,而order_id=124走了索引b
    2. 有张表查询的场景很多,当时为了满足不同的业务场景,加了多个联合索引
    3. mysql会根据下面几个因素选择素索引:
      1. 通过采样数据来估算需要扫描的行数,如果扫描的行数多,那可能IO次数会更多,对cpu的消耗也更大
      2. 是否会使用临时表,如果使用临时表也会影响查询速度
      3. 是否需要排序,如果需要排序择业会影响查询速度
      4. 总合123以及其他一些因素,mysql优化器会选出他自己认为最合适的索引
    4. mysql优化器是通过采样预估要扫描的行数的,所谓采样就是选择一些数据页来进行统计预估,这个会有一定的误差
    5. 由于MVCC会有多个版本的数据页,比如删除一些数据,但是这些数据由于还在其他的事务中可能会被看到,索引不是真正的删除,这种情况也会导致统计不准确,从而影响优化器的判断
    6. 上面这两个原因导致mysql在执行sql语句时,会选错索引
    7. 明明使用索引a的时候,执行效率更高,但实际情况却使用了索引b
    8. 为了解决mysql选错索引的问题,我们使用了关键字force index,来强制查询sql走索引a
  4. 数据量太大,查询太慢
    1. 通常情况下,单表的数据太多,无论是查询,还是写入的性能,都会下降
    2. 解决方案:
      1. 做分库分表
      2. 将历史数据备份
    3. 表中只保留最近30天的数据,超过几天的数据写入到历史表中
    4. 这样优化之后,表30天的数据量就小了很多,对性能影响不大
  5. 当上游系统执行批量修改订单状态的job,这个状态修改会发送mq给下游
    1. 这样导致,在极短的时间内,产生了大量的mq消息
    2. 而我们的mq消费者根本无法处理这些消息,所以才会产生消息积压的问题
    3. 解决方案:
      1. 增加partition数量
      2. 使用线程池处理消息
    4. 由于消息已经积压到几个已有的partition中了,再新增partition意义不大
    5. 为了开始消费积压的消息,我们将线程池的核心线程和最大线程数量调到了50
    6. 解决问题之后,我们还是保留的线程池消费消息的逻辑,将核心线程数调到8,最大线程数调到10
    7. 后面出现消息积压问题,可以及时通过调整线程数量,先临时解决问题

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

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

相关文章

从零搭建Java酒店预订系统:实战指南_02

第四步,用户注册和登录 创建用户服务接口 在src/main/java目录下创建com.example.hotelbookingsystem.service包,并在该包下创建UserService接口: package com.example.hotelbookingsystem.service;import com.example.hotelbookingsystem.entity.User;public int…

【Android面试八股文】性能优化相关面试题: 什么是内存抖动?什么是内存泄漏?

文章目录 一、什么是内存抖动?内存抖动的问题卡顿OOM(Out Of Memory)二、什么是内存泄漏(Memory Leak)?引用计数法可达性分析法一、什么是内存抖动? 在Java中,每创建一个对象,就会申请一块内存,存储对象信息; 每分配一块内存,程序的可用内存也就少一块; 当程序…

电池企业如何通过部署PLM系统提升自身竞争力

产品生命周期管理(PLM,Product Lifecycle Management)是一种集成的企业信息化管理解决方案,旨在管理产品从概念设计、研发、生产、使用到退役的整个生命周期。PLM系统通过信息化手段,将企业的各个环节紧密连接在一起&a…

中英双语介绍美国的州:佛罗里达州(Florida)

中文版 佛罗里达州(Florida)位于美国东南部,因其温暖的气候、丰富的旅游资源和多样化的文化背景而闻名。以下是对佛罗里达州各方面的详细介绍: 人口 截至2020年,美国人口普查数据显示,佛罗里达州的人口约…

什么是协程?协程和线程的区别

文章目录 前置知识应用程序和内核阻塞和非阻塞同步和异步并发和并行IO 发展历史同步编程异步多线程/进程异步消息 回调函数(响应式编程) 协程协程基本概念go 示例代码协程和线程的区别 个人简介 前置知识 在了解协程前,我们先理解一些相关的…

强化学习原理入门-1绪论

1 绪论 1.1 这是一本什么书 强化学习算法? AlphaGo大胜世界围棋冠军李世石和柯洁事件,核心算法就用到了强化学习算法。 1.2 强化学习解决什么问题 案例1 非线性系统二级倒立摆 案例2 AlphaGo与柯洁的第二局棋 案例3 机器人学习站立 ...... 智能…

数据库被后台爆破如何解决?

在数字化时代,数据库安全成为企业与组织不容忽视的关键环节。其中,“后台爆破”攻击,即通过自动化工具尝试大量的用户名和密码组合,以非法获取数据库访问权限,是常见的安全威胁之一。本文将详细介绍如何识别、防御并解…

websocket使用,spring boot + vite + vue3

websocket使用,spring boot vite vue3 Websocket是什么WebSocket 服务端构建websocket 服务实现处理器pom文件 客户端仓库地址 Websocket是什么 WebSocket 是一种网络传输协议,可在单个 TCP 连接上进行全双工通信,位于 OSI 模型的应用层。…

沙箱在“一机两用”新规下的价值体现

在数字化时代,随着企业信息化建设的深入,数据安全问题愈发凸显其重要性。一机两用新规的出台,旨在通过技术创新和管理手段,实现终端设备的安全可控,确保敏感数据的安全存储与传输。SDC沙箱技术作为一种创新的安全防护手…

springcloud-config服务器,同样的配置在linux环境下不生效

原本在windows下能争取的获取远程配置但是部署到linux上死活都没有内容,然后开始了远程调试,这里顺带讲解下获取配置文件如果使用的是Git源,config service是如何响应接口并返回配置信息的。先说问题,我的服务名原本是abc-abc-abc…

图像基础知识入门【图像概念不同图像格式】

图像基础知识入门【图像概念&不同图像格式】 最近有在处理图像转换,因此稍微补足了一下图像相关知识,特在此记录。下面汇总是我根据自己理解和网上查阅资料而来。如有错误,欢迎大家指正。 1 基础概念 像素/分辨率 像素(Pixel)&#xff…

高德定位获取详细位置失败的处理方法

在使用高德地图定位功能获取位置信息有时候会获取详细位置失败,但是经纬度是有的,这种情况下怎么处理呢,可以使用逆地理编码通过返回的经纬度来再次获取位置信息,如果再次失败那么获取详细位置信息就失败了。 具体工具类如下: package com.demo.map.utils;import androi…

如何实现电子签名签章功能?

随着技术的发展,传统的纸质合同签署方式逐渐暴露出效率低下、存储不便和安全性不足等问题。为了解决这些问题,电子签署服务为用户提供了一个安全、高效、环保的合同管理解决方案。 电子合同管理与签署平台的核心功能 1、用户管理:平台提供用…

怎么永久禁止win10系统自动更新?一键屏蔽系统自动更新

现在 Windows 10 系统是很多办公用户的主力操作系统,可是 Windows 系统会自动更新,这会严重影响系统稳定性。因为微软虽然以提供更新为服务,但并不是每次更新它都是安全的。 接下来和我一起看看如何使用联想开发的小工具一键屏蔽系统自动更新…

MQTT协议详述

MQTT 概述 消息队列遥测传输(英语:Message Queuing Telemetry Transport,缩写:MQTT),是基于发布(Publish)/订阅(Subscribe)范式的消息协议,位于…

为什么80%的码农都做不了架构师?

文章目录 一、技术广度和深度的要求1.1 技术广度1.2 技术深度 二、全局视角和系统思维2.1 全局视角2.2 系统思维 三、沟通能力和团队合作3.1 沟通能力3.2 团队合作 四、业务理解和需求分析4.1 业务理解4.2 需求分析 五、持续学习和创新能力5.1 持续学习5.2 创新能力 六、总结 &…

【UML用户指南】-25-对高级行为建模-时间和空间

目录 1、概念 2、时间 3、位置 4、常用建模技术 4.1、对定时约束建模 4.2、对对象的分布建模 分布式系统是这样一个系统,它的构件可以物理地分布在各个结点上。 为了表达对实时系统和分布式系统建模的需要,UML 提供了定时标记、时间表达式、定时约…

抛弃 Neofetch?众多优秀替代方案等你体验!

目录 抛弃 Neofetch?众多优秀替代方案等你体验Neofetch 的替代品FastfetchscreenFetchmacchina 抛弃 Neofetch?众多优秀替代方案等你体验 NeoFetch 是用 Bash 3.2 编写的命令行系统信息工具,该项目的主要开发人员已将 GitHub 存储库存档&…

【PythonWeb开发】Flask连接数据库以及执行数据迁移

一、连接数据库 在Flask中可以使用 Flask-SQLAlchemy 扩展来连接数据库。如果你选择不同的数据库或 ORM,初始化和配置的方式可能会有所不同。下面给出三种常见数据库的连接示例: (1)连接MySQL数据库 使用Flask-SQLAlchemy即可实现…