Kafka延迟队列实现分级重试

技术方案

方案背景

Kafka队列消息消费处理过程中,发生处理异常,需要实现重试机制,并基于重试次数实现不同延迟时间重试方案。

方案介绍

通过实现Kafka延迟队列来实现消息重试机制。

目标:

  1. 支持所有业务场景的延迟重试
  2. 支持多级别延迟重试
  3. 保证消息 最少消费一次

核心内容:

  1. 延迟队列,Kafka本身不支持延迟队列机制,这里我们通过定义多种Topic来扩展实现。例如Topic-1、Topic-2、Topic-3 分别代表延迟1分钟、2分钟、3分钟的队列。

    a. 每种延迟级别独立一个Topic

    b. 分区数建议与延迟调度服务部署量一致,以便于调度服务简化处理。建议值 2

  2. 延迟队列消费调度服务,负责从延迟队列拉取消息。

    a. 判断消息是否达到延迟时间,

    i. 若未达到,则delay 延迟时间-当前时间;

    ii. 若已达到,则将消息转发至对应的业务消息队列。

    b. 集群部署数量 建议值 2,消费部署数与分区数一致,以保证数据消费顺序及处理及时性

    c. 若重试次数已达到最大值,则丢失数据,并发送异常警报(钉钉)

    d. 考虑延迟队列修改offset,重新处理消息机制

  3. 业务消费服务改造,

    a. 数据处理异常时,组装延迟重试消息,将异常数据推送至延迟队列消息。

    b. 鉴于当前业务消费 BulkCopy 批量处理逻辑

技术架构

架构图

Topic-1、Topic-2、Topic-3 分别代表延迟1分钟、2分钟、3分钟的队列

核心流程

相关推荐
java叶新东老师28 分钟前
七、搭建springCloudAlibaba2021.1版本分布式微服务-skywalking9.0链路追踪
分布式·微服务·架构
橘子在努力1 小时前
【橘子分布式】gRPC(番外篇-客户端重试机制)
java·分布式·rpc
Leckun2 小时前
Kafka 3.9.1的KRaft模式部署
分布式·kafka
2501_913981784 小时前
分布式IO详解:2025年分布式无线远程IO采集控制方案选型指南
分布式·分布式io
武子康6 小时前
大数据-54 Kafka 安装配置 从 ZooKeeper 到 KRaft 的演进之路
大数据·后端·kafka
sunxunyong6 小时前
kafka开启Kerberos使用方式
分布式·kafka·linq
风象南8 小时前
用 4 张图解释 CAP 到底在纠结什么
java·分布式·后端
久念祈15 小时前
C++ - 仿 RabbitMQ 实现消息队列--服务端核心模块实现(四)
分布式·rabbitmq
GEM的左耳返16 小时前
Java面试全攻略:Spring生态与微服务架构实战
spring boot·redis·spring cloud·微服务·kafka·java面试
白鹭20 小时前
基于LNMP架构的分布式个人博客搭建
linux·运维·服务器·网络·分布式·apache