一次 Kafka 消费积压,FlashAI 如何带着我完成根因定位并修复

这是第一个震惊我的 AI 故障定位 case,此后类似的 AI 故障分析已经变成常态。

作者 快猫星云

一次 Kafka 消费积压,FlashAI 如何带着我完成根因定位并修复

2026 年以来,大模型的能力继续突飞猛进,很多企业都在探索如何用好大模型,Flashcat 也在已有的智能化思路上继续演进。

截止 5 月份,我们基本想明白并验证了可观测性要用好 AI 的几个关键,并为 FlashAI(Flashcat 内置的可观测性 AI Agent)升级了 skill 功能,配备了受控的任务通道。

本文将分享第一个真正震惊到我的智能化故障处理 case。这次典型的真实案例中,新版 FlashAI 从分析异常、建立证据链,到生成修复方案并完成恢复验证,全程“带领”着我完成。

背景

快猫星云有一个云端站点,这个站点为用户提供 Flashcat 的功能试用和预览,该站点有配套的灭火图监控。

某天,本人巡视灭火图,发现两个异常点(飘红):Kafka 集群与 VictoriaMetrics 集群异常。

本文聚焦其中的 Kafka 异常,介绍 FlashAI 如何基于灭火图信息以及任务通道,逐步定位问题、验证根因,并在人工确认后完成修复。

Kafka 与 VictoriaMetrics 集群异常

说明

在本次排查开始前,没有人掌握异常的既定答案;

该站点的自监控灭火图也由 FlashAI 协助创建;

我本人并不熟悉该云端站点的具体部署方式和模块依赖关系;

一、下钻找到故障点,先看清异常现象

进入 Kafka 异常对象后,可以看到以下现象:

  • Kafka 集群中的一个消费组,预估消费延迟已经达到数小时,消息出现严重积压,远高于卡片 10 秒的飘红阈值;
  • 预估消费延迟曲线呈锯齿状:每隔数小时会突然下降,随后再次逐步攀升。对应标签为 {consumergroup="fc-self-monitor-group", topic="fc-self-monitor"}
  • 消息生产曲线虽然存在波动,但没有出现与积压规模相匹配的异常突增;
  • 对应 {topic="fc-self-monitor"} 的消费曲线却明显异常:消费量会突然大幅升高,随后又快速回落到接近 0 的水平;
  • 消费延迟开始持续攀升的时间点接近 00:00。

消费组延迟与消费量曲线

Kafka 异常对象指标

从这些信号看:消费者似乎在周期性尝试消费,但每次都无法持续完成处理。要继续判断,还需要把 Kafka 指标与上下游组件的实际状态联系起来。

二、从异常卡片触发 FlashAI 自动分析

在异常卡片上直接点击 FlashAI,触发自动分析。

注:与从空白对话框开始不同,FlashAI 会自动带入当前异常对象及其关联的指标、日志、链路和灭火图上下文。这样,分析不必建立在单条告警文本上,而能从系统现场开始。

从异常卡片发起 AI 分析

FlashAI 初步分析结果

FlashAI 的初步结论建议继续执行若干分析动作。按传统方式,工程师需要登录机器,手动组织查询并逐项取证。在 Flashcat 中,可以继续请 FlashAI 代为执行这些排查任务。

继续委托 FlashAI 深入分析

三、交互式深入排查,自动建立故障因果链

FlashAI 生成了排查任务,并自动识别操作的危险级别;需要访问运行环境或执行有风险的动作时,FlashAI 会请用户确认后才能继续。

排查任务与风险确认

完成第一轮排查后,FlashAI 找到关键异常和初步方向:fc-stash 向 Doris 写入数据时发生积压。于是,排查范围从 Kafka 消费组延伸到了下游写入链路。它建议继续检查 Doris 日志,以及 fc-stash 与 Doris 之间的连接状态。

注:fc-stash 为 Flashcat 自研的高性能日志处理器,对标 Elasticsearch 的 logstash;Doris 为 Flashcat 底层所使用的日志存储系统;

初步定位到 fc-stash 写入 Doris 积压

下一步我没有直接沿用建议,而是按经验提出了一个排查方向:先查看 fc-stash 日志。FlashAI 按照这一方向向 fc-stash 所在的机器下发排查任务取证。

交互式提出排查方向

更多证据随之出现:写入 Doris 的日志不符合目标表的 schema 要求。FlashAI 据此形成了一条可继续验证的因果链,并建议检查 Doris 表与分区状态,而不是停留在“写入失败”的表象上。

从日志形成进一步因果链

FlashAI 同时给出修复方向与进一步确认的建议。为避免基于未验证结论直接变更,请 FlashAI 按照它自己的建议补充查看和确认。

先验证,再修复

四、确认根因:Doris 表缺少时间分区

经过进一步验证,根因被确定为:Doris 表缺少 20260508 时间分区。

由于对应表的时间分区不存在,00:00 后的数据无法写入 Doris,fc-stash 无法正常完成 Kafka 消费。这个根因也解释了前面看到的两类异常曲线:

  • fc-stash 写入 Doris 失败后会采用退避策略,在约两小时后重新尝试消费,因此消费量会周期性突然上升;
  • 重试仍因写入失败而快速回落,消息持续积压,消费组的预估消费时长于是呈现锯齿状并不断上升。

在根因与证据已经明确后,FlashAI 给出了操作 Doris 存储的修复方案,以及可以执行的修复 SQL。

确认缺失的日期分区

修复方案与具体 SQL

五、执行修复:FlashAI 代为操作,但由人确认边界

确认修复方向后,请 FlashAI 代为执行,并特别要求考虑回滚方案。

请求 FlashAI 执行修复并关注回滚

FlashAI 生成执行任务,并在真正执行前再次发起确认。对于可能影响生产环境的操作,FlashAI 不会绕过授权与确认环节。

修复执行前的二次确认

确认后,FlashAI 执行修复成功,并判断异常将逐步恢复。

修复任务执行成功

修复后的状态判断

六、异常恢复:真正的“哇塞”时刻

等待 1~2 个周期后,异常如预期恢复,灭火图中的 Kafka 卡片由飘红转绿。这是 AI 在可观测性领域第一个真正震惊到我的“哇塞”时刻!

Kafka 异常恢复,卡片转绿

七、还原异常现场:默认配置如何逐层传导为 Kafka 消息积压

故障恢复后,继续追溯 Doris 分区异常的原因。

FlashAI 分析确认,Doris 的配置中设置后端 BE 为 3 副本,但实际环境中,出于成本考虑只保留了 1 个副本。Doris 在创建动态分区时,会校验 BE 节点数量是否满足副本数要求,不满足则分区创建会失败。

Doris 分区与副本数相关配置

Doris 相关状态信息

在灭火图中查看 Doris 节点状态,可以确认 5 月 6 日确实发生过上线操作。

Doris 节点状态与上线时间

完整的异常过程如下:

  1. 5 月 6 日,Flashcat 云端站点升级;部署 Doris 时使用了默认配置,其中副本数默认设置为 3。
  2. Doris 创建动态时间分区时,会检查 BE 节点数量是否满足副本数要求;若不满足,动态分区创建失败。
  3. 升级前已生成 20260507 分区,因此 5 月 7 日的业务仍然正常。
  4. 升级后的 5 月 7 日,BE 副本数不满足配置要求,Doris 无法创建 20260508 分区。
  5. 5 月 8 日 00:00 起,Doris 写入异常;上游 fc-stash 随之无法正常写入和消费 Kafka 日志,消费组的预估消费时长逐步升高,最终远超飘红阈值。
  6. fc-stash 在写入失败后退避重试,约每两小时重新消费一次;因此消费量会短暂攀升后再次回落,预估消费时长曲线也随之呈锯齿状。

结语:让 AI 真正发挥它的“专家”能力,“带领”你完成故障的排查直至修复

这次故障的表象是 Kafka 消费积压,根因却涉及 Doris 分区、BE 副本数和一次历史升级配置。

对于不了解现场的人来说,要跨越 Kafka、fc-stash 与 Doris 建立完整链路,往往需要反复切换系统、组织查询并人工验证。如果是单人来执行排查,执行者不但需要同时具备这些组件的专家知识,还需要知道在哪里以及如何使用相关的数据查询系统,也包括拥有这些系统的查询权限。

这个排障的门槛相当之高,如果不是“老司机”很难一个人完成类似的排障过程。这类历史上的变更导致今天出现故障的 case,更是提高了排障分析的难度。

但是 AI 就是这个“老司机”,AI 所掌握的“专家知识”相信已经超过了绝大部分的人类专家。今天我们要做的事情就是用好 AI 这个“老司机”,给他把故障系统的上下文准备好,给他安装上任务通道这“双手”,做好权限和风险的边界控制,让 AI 能放手发挥自己的能力,“带领”着你完成整个故障处理过程。 而不是把“老司机”关在笼子里,偶尔给个只言片语,问问他的建议。

很多人看到这里一定会有疑问:故障系统的上下文如何建设?AI 有了自己的“双手”能否保证他不做出类似删库跑路的事情?风险如何控制?这些都是我们为 AI 铺路时做了大量考虑和实现的方向,我将在后续的文章中分享。

延伸路径

继续看解决方案和产品对比

如果你正在做监控、可观测性或故障定位相关选型,建议从解决方案和产品对比继续往下看。

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云