kafka大量堆积故障复盘(生产环境)

news/2024/11/10 8:29:47

kafka大量消息堆积故障复盘

  • 一、前言
  • 二、过程复盘
  • 三、总结
    • 1、产生原因
    • 2、解决方案
      • 2.1、优先处理堆积数据,恢复生产环境
      • 2.2、处理堆积数据

一、前言

这个事是上个老东家遇到的,我是一个旁观者的角度目睹整个故障的产生和修复,过后也未进行总结复盘。最近吧,自己被安排解决kafka重复消费的一些问题,就想起来这个事,索性就把整个事件进行一个回顾,另外也把kafka大量消息堆积的处理方案也进行总结归纳,这个问题还是比较常见的。

二、过程复盘

某一天晚上,公司某一个程序员写的某一个程序挂掉了,服务呢也没有被重新拉起来。这个服务的逻辑并不是很复杂,主要是消费kafka消息并计算出一个数据,但并发量很大,每天有大概几百w的量级。

这个服务挂掉后,kafka集群的消息就一直开始堆积,到第二天来到公司后发现,大概一共堆积了200w的消息,重启服务器后,发现以服务的消费速度要完全消费掉所有的堆积数据也需要1天多,这么多的数据很明显不能让他持续堆积着,一个是影响最新数据的处理,另外也占用多余的资源。

所以我们技术部的大leader提出了一个解决方案,新增一批5个消费者和5个kafka分区,这些消费者的主要功能是消费数据并入库存储(临时开发),一个消费者qps为500,5个消费者一分种的吞吐量为500 * 60 * 5 = 15w,200w堆积消息20分钟内能解决掉。当然这只是第一个步骤,这个步骤完成后可以保证生产环境正常工作。

第二个步骤,解决这些未消费的消息。正常情况下,我们的消费者的吞吐量远大于生产者的吞吐量的,我们只需要把再写一个服务:把临时存储的200w堆积消息,以不会产生堆积的速度再次生产到kafka集群中,让消费者消费掉就可以了。

三、总结

懒的画图了,贴个还算清晰的kafka的架构图:

在这里插入图片描述

1、产生原因

  • consumer意外down机
  • consumer吞吐量低于producer
  • partition分区过少
  • consumer处理超时,导致频繁rebalance

2、解决方案

2.1、优先处理堆积数据,恢复生产环境

  1. 增大partition个数
  2. 增加消费者数量
  3. 消费堆积数据入库保存
  4. 减少consumer处理时长
  5. 避免产生rebalance

注意:
同一个消费群组的consumer个数要等于partition个数,这样能让consumer的消费能力提升到最大。

同一个topic下的partition和sonsumer对应关系:

在这里插入图片描述

2.2、处理堆积数据

  1. 非时间敏感数据,读库并生产到消费队列。
  2. 时间敏感数据,梳理业务影响,采取能保证数据一致性的方案,如手动导入、重新构造等等。

参考链接:
Kafka 消费者与消费组
如何处理大量积压消息


http://www.niftyadmin.cn/n/3656064.html

相关文章

GIS自主创新十年路(一):缘起ActiveMap

GIS自主创新十年路(一) :缘起ActiveMap转载自:http://songguanfu.blog.ccidnet.com/blog.php?doshowone&itemid187062&typblog作者:宋关福原文发表时间:2007年9月18日从 最初默默无闻的课题组,到今天在GIS自主…

kafka重复消费(总结)

kafka重复消费(总结)根本原因解决方法关键参数配置根本原因 已经消费的数据,但是offset没有成功提交 具体情况: 消费者宕机、重启,导致消息已经消费但是未提交offset。消费者处理比较耗时,一次poll的数据…

GIS自主创新十年路(二) :牛刀小试

GIS自主创新十年路(二) 牛刀小试转载自:http://songguanfu.blog.ccidnet.com/blog-htm-do-showone-uid-33694-type-blog-itemid-187063.html作者:宋关福原文发表时间:2007年9月18日推荐ActiveMap并没有被立即派上用场。当时我们正在给解放军驻…

qtextcodec file not find 问题解决

项目文件.pro中添加 QT core5compat头文件中添加 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)#include <QtCore/QTextCodec> #else#include <QtCore5Compat/QTextCodec> #endif

springboot升级引入的跨域问题

springboot版本从2.3.3.RELEASE升级到2.5.14后&#xff0c;前端访问后台接口提示跨域问题。 将原来的跨域配置&#xff0c;如下&#xff1a; Configuration public class CorsConfig{Beanpublic CorsFilter corsFilter() {CorsConfiguration config new CorsConfiguration()…

GOOGLE地球浏览器分析(八):Google Earth 2007年最新进展

GOOGLE地球浏览器分析&#xff08;八&#xff09;&#xff1a;Google Earth 2007年最新进展粟卫民http://www.gisdev.cn/ http://blog.csdn.net/suen/ 日期&#xff1a;2007-10-16保留所有版权。如需转载&#xff0c;请联系作者&#xff0c;并在醒目位置注明出处早先在不少国外…

Unsupported class file major version 60

最近项目依赖的一个第三方组件升级了&#xff0c;升级了pom文件依赖之后&#xff0c;发现本地启动报错&#xff0c;如下&#xff1a; 我的java版本是16&#xff0c;springboot的版本是2.3.3.RELEASE&#xff0c;分析发现是springboot的版本不支持java16&#xff0c;需要升级。 …