Kafka 消息不能正常消费问题排查

订单宽表数据不同步

事情的起因是专员在 ze app 上查不到订单了,而订单数据是从 mysql 的 order_search_info 查询的,order_search_info 表的数据是从 oracel 的 BZ_ORDER_INFO 表同步过来的,查不到说明同步有问题

首先重启,同步数据,问题解决,然后查找原因。首先看日志,有如下两种情况

有的容器消费消息的日志正常打印
有的容器很长时间没有消费消息的日志(看着像是消息丢失,福华找dba确认后明确发送没问题,只能是消费的问题)

接着看容器的状况

在这里插入图片描述
在这里插入图片描述

查看了应用重启前各个容器的 CPU 和内存情况,发现并不均匀,有如下三种情况

  1. CPU一直很高(内存稳定)
  2. CPU和内存一直稳定上升
  3. CPU一直很低(内存稳定)

在这里插入图片描述

看监控发现消息在分区中分布的也不均衡

接着就按照如下现象来进行排查问题

  1. 为什么消息发送不均衡
  2. 为什么有的容器CPU一直很高,有的一直很低,有的持续升高(CPU飙高的机器,内存也不断上涨)

为什么会出现这些现象

producer发送消息和consumer消费消息都有对应的负载均衡策略,既然消息发送不均衡,只需要看producer的负载均衡策略即可

在这里插入图片描述

producer的负载均衡实现类为 DefaultPartitioner,具体实现为

  1. 如果 key 为 null:消息将以轮询的方式,在所有可用分区中分别写入消息
  2. 如果 key 不为 null:对 Key 值进行 Hash 计算,从所有分区中根据 Key 的 Hash 值计算出一个分区号;拥有相同 Key 值的消息被写入同一个分区;

所以推测 hddp-datasync 消费的消息指定了key,看消费日志确定了猜想,key的名字为表名,例如

HLASSET.BZ_ROOMCONFIG_DETAIL
HLASSET.BZ_ORDER_INFO

这样就明确了,同一张表的数据只会被发送到同一个分区,同一个分区的数据只能被一个 Consumer 消费

接着我们查到 CPU 一直比较高的容器,消费的是合同表的数据,合同表的数据变更比较频繁,所以CPU比较高

而 CPU 持续飙升的容器,消费的是订单表的数据。

接着就是排查消费订单表的容器为什么CPU和内存持续飙升

排查内存泄漏

一般使用 Eclipse Memory Analyzer 分析内存泄漏的问题,先生成 dump 文件

李立敏 > hddp-datasync 消息不同步问题排查 > image2022-10-10_20-42-27.png

点击 Leak Supects 查看内存泄漏分析

在这里插入图片描述

总共使用了110MB内存,Thread线程占用了29M,总共创建了2686个线程,看一下这些线程是哪些?

在这里插入图片描述

线程数量最多的线程名字为datasync-execuotr-1,到代码中查看是否有类似线程

在这里插入图片描述

在这里插入图片描述

每消费一次订单表的数据,就会新创建一个线程池,核心线程数为10,不断创建线程导致内存和CPU不断飙升,消息不能正常消费,后续消费消息改成使用一个固定的现成池后,消息正常消费

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

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

相关文章

Modelsim SE 10.5安装教程

ModelSim 是一种功能强大的硬件描述语言 (HDL,Hardware Description Language) 仿真和验证工具,可以单独仿真,也可以联合Quartus/Vivado等软件联合仿真,仿真速度快,广泛应用于数字电路设计和验证领域。 大学老师爱教VH…

图像识别,很强,专业以图搜图小软件!

软件简介: 软件【下载地址】获取方式见文末。注:推荐使用,更贴合此安装方法! ImageSearch v1.12最新版是一款功能强大且免费开源的工具,专注于通过算法实现本地电脑的图像搜索功能,无需依赖AI技术。它的操…

LeetCode 2744.最大字符串配对数目:哈希表

【LetMeFly】2744.最大字符串配对数目:哈希表 力扣题目链接:https://leetcode.cn/problems/find-maximum-number-of-string-pairs/ 给你一个下标从 0 开始的数组 words ,数组中包含 互不相同 的字符串。 如果字符串 words[i] 与字符串 wor…

DP读书:《openEuler操作系统》(七)FSCK与VFS虚拟文件系统

10min速通FSCK、原子操作与VFS 文件系统检查器1.检查inode表1) 遍历所有inode2) 修复多次引用数据块 2.检查目录结构3.检查目录的连接1) 检查根目录确保存在2) 遍历所有目录的inode,有问题的连接到/lostfound 4.检查引用次数5.检查位图一致性 日志1.主要的数据结构1) 原子操作描…

一文了解GeoTrust SSL证书

在当今互联网的高度连接世界中,确保网站安全性至关重要。SSL证书是保护网站和用户数据的关键组成部分。GeoTrust证书在SSL证书市场上享有盛誉,被许多网站所有者和企业所信赖。JoySSL将深入探讨GeoTrust证书的特点,帮助大家了解该品牌并做出更…

lua使用resty.http做nginx反向代理(https请求,docker容器化部署集群),一个域名多项目转发

下载使用 链接:https://pan.baidu.com/s/1uQ7yCzQsPWsF6xavFTpbZg 提取码:htay –来自百度网盘超级会员V5的分享 在根目录下执行: # 从 github 上下载文件 git clone https://github.com/ledgetech/lua-resty-http.git # 将 lua-resty-http/lib/ 下的 r…

计算机网络——数据链路层-媒体接入控制-静态划分信道(频分复用FDM、时分复用TDM、波分复用WDM、码分复用CDM)

目录 频分复用FDM 时分复用TDM 波分复用WDM 码分复用CDM 练习1 码分多址的应用举例 练习2 本篇我们介绍媒体接入控制的其中一类方法——静态划分信道 首先介绍信道复用的基本概念, 复用(Multiplexing)是通信技术中的一个重要概念&a…

SpringBoot中整合MybatisPlus快速实现Mysql增删改查和条件构造器

场景 Mybatis-Plus(简称MP)是一个Mybatis的增强工具,只是在Mybatis的基础上做了增强却不做改变,MyBatis-Plus支持所有Mybatis原生的特性, 所以引入Mybatis-Plus不会对现有的Mybatis构架产生任何影响。MyBatis 增强工具包,简化 C…

强化学习入门

强化学习是指智能体通过不断试错的方式进行学习,利用与环境进行交互时获得的奖励或惩罚来指导行为 试错学习 尝试(决策-decision)错误结果:每次尝试无论产生什么样的结果,都会对下一次结果产生影响 奖励(…

使用elasticsearchdump迁移elasticsearch数据实战

目录 1.安装nodejs 2.安装elasticsearchdump 3.迁移 4.核对数据 5.注意事项 1.安装nodejs https://ascendking.blog.csdn.net/article/details/135509838 2.安装elasticsearchdump npm install elasticdump -g 3.迁移 elasticdump --inputhttp://用户:密码源ES地址/源…

Springboot 子工程构建完后无法找到springboot依赖

问题: 构建完子工程后无法找到SpringBootTest 解决方案: 最好用这个构建 https://www.cnblogs.com/he-wen/p/16735239.html 1.先观察项目目录 是否正确 2.观察子工程目录 3.看pom.xml中是否引用springboot依赖 4.检查代码 查看父项目是否包含子模块 查看子模块的父项目是否…

vscode 中配置 python 虚拟环境

vscode 中配置 python 虚拟环境 Start 在编写代码的过程中,我们经常会用到一些第三方依赖,帮助我们快速完成功能。在 Python 中,默认情况都是统一安装在全局环境中,但是这样伴随着电脑项目越来越多,不同项目对依赖的…

【LeetCode算法题】数组经典题目分析

系列文章目录 【LeetCode算法题】各类基础排序算法的Python实现 【LeetCode算法题】数组经典题目分析 文章目录 系列文章目录前言一、二分查找(704)二、移除元素(27)三、有序数组的平方(977)四、长度最小…

Intel Quartus II IP之DP1.4 工程的创建与使用

前述: Win10电脑安装了Quartus 21.4,这可以满足绝大多数情况,但是对于创建DMI/DP IP的设计demo工程时会报错,因为还需要Eclipse与WSL(Windows Subsystem for Linux)。 具体安装方法参考: Int…

Redis与DB数据一致性-个人总结

缓存读写策略: Cache-Aside Pattern 读缓存: 先查询缓存,存在则返回, 如果不存在则查询DB, 再塞回缓存中,最后返回结果. 写缓存: 更新完成DB之后,删除缓存. 适合场景: 读比较多的场景,更新比较少的场景. 像我们工作当中&#…

R语言【paleobioDB】——pbdb_strata_auto():通过部分名称或前缀返回多个地质地层的基本信息

Package paleobioDB version 0.7.0 paleobioDB 包在2020年已经停止更新,该包依赖PBDB v1 API。 可以选择在Index of /src/contrib/Archive/paleobioDB (r-project.org)下载安装包后,执行本地安装。 Usage pbdb_strata_auto (...) Arguments 参数【...…

redis7部署集群:包含主从模式、哨兵模式、Cluster集群模式等三种模式

前言: redis部署集群常见的一般有三种模式:主从模式,Sentinel(哨兵模式),Redis Cluster(高可用Cluster集群),根据不同的需求可自定义选择部署方式。 Redis 主从模式&…

c# 视频播放之Vlc.DotNet.Forms

先说下优缺点 优点:与电脑无关,能播放主流编码格式视频。 缺点:只能播放本地视频,网络视频播放不了。 下面是具体操作和代码 1. 安装Vlc.DotNet.Forms 和 VideoLAN.LibVLC.Windows Vlc.DotNet.Forms 是播放库,Vid…

C语言所有字符串函数举例如何使用

strcpy: 将一个字符串复制到另一个字符串中 char source[] "Hello"; char destination[10]; strcpy(destination, source);strcat: 将一个字符串连接到另一个字符串的末尾 char str1[20] "Hello"; char str2[] "World"; strcat(str1, str2)…

三网话费余额查询的API系统,基于thinkphp6.0框架,附带搭建教程

系统用的是Thinkphp6.0框架 PHP版本需要用8.2 搭建教程 1、源码上传后,吧运行目录改为 /public 2、然后吧 数据库文件.sql 这个文件导入到数据库内 3、打开/config/database.php目录文件,然后进行配置数据库信息 4、挂任务计划,用处&…