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

文章目录

现象

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

业务背景

  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是客户端需要主动到服务端取数据,优点是客户端可以依据自己的消费能力进行消费,但拉取的频率也需要用户自己控制,拉取频繁容易造成服务端和客户端的压力,拉取间隔长又容易造成消费不及时。
相关推荐
杨运交4 小时前
[060][调度模块]Redisson vs Redis 原生锁:两种分布式锁实现深度对比
数据库·redis·分布式
heimeiyingwang9 小时前
【架构实战】分布式事务:从CAP定理到Seata实战,一文讲透跨服务数据一致性
分布式·架构
lakernote13 小时前
图解 Kafka Consumer 常用 API:poll、seek、pause、wakeup 到底在控制什么?
分布式·kafka·linq
lazy H16 小时前
不同的消息队列有什么区别?Kafka、RabbitMQ、RocketMQ、Pulsar、ActiveMQ 选型对比
后端·中间件·kafka·rabbitmq·rocketmq
数据库小学妹17 小时前
集群与分布式啥区别?从主从集群到分布式实战
分布式·分布式数据库·数据库架构·集群·分库分表·主从集群·集群与分布式
江畔柳前堤17 小时前
AgentScope 设计与原理全解:从消息原语到分布式智能体工程底座
大数据·人工智能·分布式·目标检测·机器学习·语言模型·架构
萧瑟余晖17 小时前
Java深入解析篇三十四之分布式事务
java·开发语言·分布式
零域码客17 小时前
Redis 双刃剑:缓存与分布式锁的本质区别
redis·分布式·缓存·并发控制·后端架构
hopsky19 小时前
kafka 对发送端的容错处理
数据库·分布式·kafka
ltl1 天前
3D 并行深度:数据 / 张量 / 流水 / 序列 / ZeRO
分布式