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分钟的队列

核心流程

相关推荐
掘金-我是哪吒22 分钟前
Kafka配套的Zookeeper启动脚本
分布式·zookeeper·云原生·kafka
超级种码37 分钟前
Kafka四部曲之一:Kafka的核心概念
分布式·kafka
Java 码农2 小时前
RabbitMQ集群部署方案及配置指南09
分布式·rabbitmq
u0104058362 小时前
基于 Kafka Exactly-Once 语义保障微信群发消息不重复不丢失
分布式·kafka·linq
超级种码2 小时前
Kafka四部曲之二:核心架构与设计深度解析
分布式·架构·kafka
optimistic_chen2 小时前
【Redis 系列】持久化特性
linux·数据库·redis·分布式·中间件·持久化
论迹2 小时前
RabbitMQ
分布式·rabbitmq
Java 码农2 小时前
RabbitMQ集群部署方案及配置指南08--电商业务延迟队列定制化方案
大数据·分布式·rabbitmq
CodeAmaz3 小时前
分布式 ID 方案(详细版)
分布式·分布式id
win x4 小时前
RabbitMQ快速上手
分布式·rabbitmq