当前位置: 首页 > news >正文

【Kafka】记录一次Kafka消费者重复消费问题

文章目录

  • 现象
  • 业务背景
  • 排查过程
  • Push与Pull

现象

用户反馈消费者出现消息积压,并且通过日志看,一直重复消费,且没有报错日志。

img

业务背景

  1. 用户的消费者是一个将文件做Embedding的任务,(由于AI技术的兴起,大量文档需要做RAG);
  2. Embedding是一个比较耗时的过程,如果文件大,耗时会更长;
  3. 消费者使用的是push模式、手动提交offset的方式;
  4. 由于耗时比较长,将提交offset的超时时间改成了2小时;
  5. 服务运行一段时间,QPS不高(个位数),压力不大。

排查过程

  1. 从监控中看,消费者有了100多条积压,并且持续了很长时间;
  2. 从业务上,有一个用户同一时间上传了大量大文件;
  3. 只有一个消费者,服务端瞬间产生大量消息,同一时间推送给了消费者;
  4. 消费者处理Embedding任务超过两小时,导致这一批消息提交offset超时;
  5. 服务端认为客户端处理消息失败,一直进行重新推送,所以造成了没报错,但是一直重复消费的情况。

Push与Pull

MQ的消费模式可以大致分为两种,一种是推Push,一种是拉Pull。

  • Push是服务端主动推送消息给客户端,优点是及时性较好,但如果客户端没有做好流控,一旦服务端推送大量消息到客户端时,就会导致客户端消息堆积甚至崩溃。
  • Pull是客户端需要主动到服务端取数据,优点是客户端可以依据自己的消费能力进行消费,但拉取的频率也需要用户自己控制,拉取频繁容易造成服务端和客户端的压力,拉取间隔长又容易造成消费不及时。
http://www.lryc.cn/news/390835.html

相关文章:

  • Android使用http加载自建服务器静态网页
  • python解耦重构,提高程序维护性
  • 深入解析 Laravel 事件系统:架构、实现与应用
  • 视频怎么制作gif动态图片?GIF制作方法分享
  • js 使用 lodash-es 检测某个值是否是函数
  • [go-zero] goctl 生成api和rpc
  • docker -run hello-world超时
  • 拓扑学习系列(8)黎曼度量曲面与高斯曲率
  • 汽车IVI中控开发入门及进阶(三十四):i.MX linux BSP
  • 【Python机器学习】算法链与管道——构建管道
  • Postman 高级用法学习
  • 从新手到高手:Scala函数式编程完全指南,Scala 访问修饰符(6)
  • IDEA 一键部署Docker
  • linux centos tomcat 不安全的HTTP请求方法
  • 深入Django(六)
  • PHP房产小程序微信小程序系统源码
  • vscode 历史便携版下载方法
  • 深入理解计算机系统 CSAPP 家庭作业8.19
  • JDBC学习(Java DataBase Connectivity)
  • 2024源代码加密软件评测丨保护企业源代码防泄密
  • 测试图片上传功能,使用postman提供的url
  • 使用dot来画流程图
  • 基于Java的微信记账小程序【附源码】
  • uniapp中 uni.previewImage用法
  • 第十三章 StringTable
  • Adobe Acrobat添加时间戳服务器
  • 数据库管理-第217期 Oracle的高可用-02(20240704)
  • 搭建基础库~
  • 深入了解Linux中的udhcpc:动态主机配置协议客户端
  • O2OA(翱途) 开发平台之HTTP端口规划