Kafka 消息重试设计:别让失败消息原地打转
Kafka 消息重试设计别让失败消息原地打转一、重试不是直接再消费一次Kafka 常用于微服务解耦。消费失败时很多代码会直接抛异常让消息再次被消费。这样简单但如果下游一直不可用或消息本身有问题就会原地打转阻塞后续消息甚至形成重试风暴。消息重试要区分临时失败和永久失败。二、先拆失败类型flowchart TD A[消费失败] -- B{失败类型} B -- C[下游超时] B -- D[数据格式错误] B -- E[业务状态冲突] C -- F[延迟重试] D -- G[死信] E -- H[人工或补偿]不是所有失败都该重试。格式错误重试一百次也不会好下游超时才适合延迟重试。kafka_retry_policy: transient_error: retry_with_backoff invalid_message: dead_letter business_conflict: manual_review策略要按错误码判断不要所有异常一刀切。三、延迟重试要分级record RetryMessage(String key, int retryCount, String lastError) {}可以用多个 retry topic 实现不同延迟比如 1 分钟、5 分钟、30 分钟。每次失败增加 retryCount超过上限进入死信。重试消息要保留原始 key 和上下文方便幂等和排查。不要只把 payload 丢进新 topic。四、消费逻辑要幂等Kafka 默认至少一次投递重复消费是正常现象。业务写入必须有幂等键不能因为重试创建重复订单、重复通知、重复扣费。consumer_idempotency: idempotency_key: message_id unique_index: true record_processed_result: true如果处理成功但提交 offset 失败消息还会再次投递。幂等设计就是为这种情况准备的。死信队列也不是垃圾桶。进入死信后要有告警、查询、修复和重放流程。否则失败消息只是换个地方沉默。最后重试要保护下游。下游故障时所有消费者疯狂重试只会让恢复更慢。退避、限流和熔断要一起设计。重试还要保留顺序要求。某些 topic 的消息必须按业务 key 保序比如同一个订单的状态变化。如果失败消息被丢到延迟 topic后续消息可能先执行状态就乱了。ordering_policy: preserve_order_by_key: true block_following_messages_on_key_failure: optional是否阻塞后续消息要按业务决定。强顺序业务宁愿慢也不能乱弱顺序业务可以让后续消息先走提高吞吐。还要给死信队列加分类字段。格式错误、业务冲突、下游不可用进入死信后的处理人不同分类清楚才能分派。最后重放死信要谨慎。修复代码后批量重放前最好先小批量验证避免把历史错误一次性重新打进系统。消费者还要暴露积压指标。重试 topic、主 topic、死信 topic 的 lag、最老消息年龄和消费速率都要看。只看主 topic lag可能漏掉大量正在延迟重试的失败消息。kafka_retry_metrics: main_lag: true retry_lag: true dead_letter_count: true oldest_message_age: true还要给重试链路设置最大生命周期。消息重试几天后还没成功通常已经失去业务意义应该进入人工处理而不是继续消耗资源。重试系统的可观测性经常被忽视。除了常规的 lag、消费速率等指标外重试系统还需要关注重试环某些消息不断在重试 topic 之间流转但始终无法成功却也没进入死信队列。这种情况通常发生在错误分类不准确时——消息被判定为可重试但实际上问题根本没修复。为了避免消息在重试环里无限循环可以在消息头里加入已尝试的 retry topic 列表当检测到消息已经在所有重试级别都失败过时直接转入死信而不是继续下一个重试周期。Kafka 重试还需要考虑消费者组内重平衡的影响。当消费者加入或离开组时分区会重新分配这可能导致正在处理的重试消息被中断。如果消息处理还没完成就触发了 rebalance这条消息可能会被另一个消费者再次消费导致重复处理。虽然幂等设计可以解决数据重复问题但会带来额外的处理成本。在设计重试机制时可以通过调整max.poll.interval.ms和session.timeout.ms来减少不必要的重平衡同时确保消息处理能够在预期的 poll 间隔内完成。五、总结Kafka 消息重试要按失败类型分流使用延迟重试、重试上限、死信队列和幂等消费。失败消息不要原地打转。重试有节奏系统才有恢复空间。

相关新闻

ROS集成开发环境

ROS集成开发环境

1.TER快捷键2.VS code 安装首先 在网站下载VS code,Linux最好用.deb格式下载好以后,直接拖到linux的文件夹中在这个文件夹打开终端sudo dpkg -i x.debx.deb是你的安装包名卸载代码code的代码:sudo dpkg --purge code插件里面ros现在使用robot…

2026/7/5 14:22:33阅读更多 →
百万瓦的电台,几秒钟换一个频率——从Aspidistra到中亚的发射机房,一段高功率短波的快调谐往事

百万瓦的电台,几秒钟换一个频率——从Aspidistra到中亚的发射机房,一段高功率短波的快调谐往事

▲图:Aspidistra 发射机的射频输出耦合线圈(现存于 Orfordness)。换频时要重新调到共振、重新匹配的,就是这类大尺寸的调谐与耦合元件。功率越大,把它们重新对准的那一步越难。(图源:Wikimedia …

2026/7/5 14:22:33阅读更多 →
PowerShell免杀

PowerShell免杀

要知道powershell免杀就要先知道powershell是什么 Windows PowerShell是微软发布的一种命令行利用NET Framework的强大功能,Windows7及以上的操作系统目前都是自带的 先说明下这边的实验环境:安装了火绒和360的win11虚拟机各一台 生成powershell远控木…

2026/7/5 14:22:33阅读更多 →
AI专著写作全流程揭秘:AI工具如何助力轻松完成20万字专著撰写?

AI专著写作全流程揭秘:AI工具如何助力轻松完成20万字专著撰写?

创新是学术专著的核心,也是写作过程中最具挑战性的标准。一本优秀的专著,不仅仅是对已有研究成果的简单汇总,而是需要提出全书贯穿的新颖观点、理论框架或研究方法。在大量的学术文献中,挖掘出尚未被探讨的研究空白其实并不容易—…

2026/7/5 15:32:45阅读更多 →
【C++】类和对象1

【C++】类和对象1

类和对象1 1、类的定义 C中可以用struct定义一个类,但更多的是使用class定义类 举例: C语言中的结构体 // C 语言:仅能定义变量,不能定义函数 struct Student {char name[20];int age;// 错误!C 不允许结构体里写函数/…

2026/7/5 15:32:45阅读更多 →
基于TPAFE0808和STM32的多通道信号采集系统设计

基于TPAFE0808和STM32的多通道信号采集系统设计

1. 项目概述:多通道信号控制与监测系统设计在工业自动化、医疗设备和科研仪器等领域,多通道信号的高精度控制和实时监测是核心需求。本项目基于TPAFE0808模拟前端芯片和STM32F401RB微控制器构建了一个8通道信号采集与控制系统,实现了对模拟信…

2026/7/5 15:32:45阅读更多 →
ICM-42688-P与STM32L011K4在工业运动检测中的应用

ICM-42688-P与STM32L011K4在工业运动检测中的应用

1. ICM-42688-P与STM32L011K4的黄金组合解析在工业自动化和机器人控制领域,精确的运动感知是系统稳定运行的基础。ICM-42688-P作为TDK InvenSense推出的6轴MEMS运动跟踪传感器,与STMicroelectronics的STM32L011K4超低功耗微控制器形成的解决方案&#xf…

2026/7/5 15:32:45阅读更多 →
Nintendo Switch游戏文件终极管理指南:NSC_BUILDER完全解析

Nintendo Switch游戏文件终极管理指南:NSC_BUILDER完全解析

Nintendo Switch游戏文件终极管理指南:NSC_BUILDER完全解析 【免费下载链接】NSC_BUILDER Nintendo Switch Cleaner and Builder. A batchfile, python and html script based in hacbuild and Nuts python libraries. Designed initially to erase titlerights enc…

2026/7/5 15:32:45阅读更多 →
【Linux】六.开发工具之版本控制器git,调试器gdb,ubuntu更新apt源

【Linux】六.开发工具之版本控制器git,调试器gdb,ubuntu更新apt源

一.版本控制器1-1定义:所谓的版本控制器,就是能让你了解到⼀个⽂件的历史,以及它的发展过程的系统。通俗的讲就是⼀个可以记录⼯程的每⼀次改动和版本迭代的⼀个管理系统,同时也⽅便多⼈协同作业。⽬前最主流的版本控制器就是 Git…

2026/7/5 15:27:44阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/5 0:01:08阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/5 0:01:08阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/5 0:01:08阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/5 0:01:08阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/5 0:01:08阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/5 0:01:08阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/5 1:30:27阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/5 3:48:10阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/5 3:48:09阅读更多 →