当前位置: 首页 > news >正文

Kafka + 时间轮 + 数据库实现延迟队列方案

Kafka 原生不支持延迟队列功能。而RabbitMQ、RocketMQ及Redis等其他消息队列原生支持延迟队列。

RabbitMQ

RocketMQ

Redis

实现方式

通过插件实现,消息进入延迟队列后根据配置时间过滤转发。

原生支持,发送消息时设置延迟级别,定时任务处理到期消息。

通过sorted set实现,消息按延迟时间存储。

特点

优点:易于部署使用,支持消息重试和顺序处理。

缺点:性能较低,不适合高并发场景。

优点:高性能、支持分布式和消息持久化。

缺点:不支持动态添加/删除队列。

优点:性能高,支持高并发。

缺点:消息未经持久化,存在丢失风险。

适用场景

中小型任务调度和消息通知。

大规模数据处理,高性能要求场景。

轻量级任务调度和短期延迟任务。

表 RabbitMQ、RocketMQ及Redis实现延迟方案对比

延迟队列的其他实现方式:

1)  数据库 + 定时任务。

实现:将消息存储到数据库并记录目标执行时间,定时任务轮询数据库,将到期的消息取出并消费。

优点:延迟时间精准控制,可靠性高。

缺点:依赖数据库,性能受限。

适用场景:延迟时间不固定,消息量不大。

2) Redis ZSet方案

实现:利用Redis有序集合(ZSet),以消息的执行时间作为score,消费者定时轮询到期消息。

优点:基于内存,性能高。

缺点:消息可能丢失。

1 Kafka + 时间轮 + 数据库实现延迟队列

实现:创建一个延迟队列Topic,将需要延迟的消息发送到这里。该Topic由一个专门的消费者处理。通过时间轮将读取的延迟队列消息存储并在消息的期望执行时间将消息再发送到目标Topic。

图 Kafka + 时间轮实现延迟队列示例图

1.1 时间轮可靠性保证

方案的关键在于时间轮,时间轮是在内存中的数据结构,除了需要保证消息的准时性,还需要可靠性,即当项目重启后,原先在时间轮中的消息不能丢失。

当消息进入时间轮时,同步将这个消息存储到数据库中,状态为待完成,当这条消息被处理后,标注为已完成。

当系统重启时,从数据库中获取待处理的任务,并把它们放入到时间轮中。

​​​​​​​1.2 角色职责及数据结构

表 Kafka + 时间轮 + 数据库实现延迟队列

延迟消息:指定执行日期的消息,包含字段:id、执行日期、目标topic、状态(待执行、执行完成、执行失败)、目标参数。

延迟消息生产者:业务代码中延迟任务的产出源头。负责将延迟消息发送给Kafka的延迟队列Topic。

延迟队列Topic消费者:消费Kafka 延迟队列Topic的消息,将待执行的消息放入到时间轮中,同时将其持久化到数据库中。

时间轮:负责延迟消息的调度,将要执行的消息发送到Kafka的目标Topic中。

目标Topic消费者:消费Kafka目标Topic的消息,并根据消息的id,来更新其在数据库中的状态。

http://www.lryc.cn/news/614389.html

相关文章:

  • 全场景音频工作流实践:Melody如何打造音源管理闭环
  • 使用FinTSB框架进行金融时间序列预测的完整指南
  • (Arxiv-2025) CINEMA:通过基于MLLM的引导实现多主体一致性视频生成
  • iOS混淆工具有哪些?跨平台 App 混淆与保护的实用方案
  • Flutter开发 SingleChildScrollView、ScrollController
  • 大语言模型提示工程与应用:提示词基础使用方式
  • 【重学MySQL】事务隔离
  • 单层 PDF 与双层 PDF:一字之差,功能大不同
  • 学生如何使用 DeepSeek 帮助自己的学习?
  • 自有域名功能详解——安全可控的企业级访问方案
  • select ... for update阻塞
  • 智慧社区(九)——事务加持下的小区删除操作
  • 前端老项目依赖安全漏洞解决
  • 如何使用 pg_rman 进行 PostgreSQL 的备份与恢复
  • 超算中心的基本组成,国内有哪些比较有名的超算中心?
  • 【网络】TCP/UDP协议
  • Word中怎样插入特殊符号
  • Spring Boot + ECharts 极简整合指南:从零实现动态数据可视化大屏
  • Linux常见服务器配置(三):MariaDB数据库管理和WEB服务器
  • 京东一面:MySQL 主备延迟有哪些坑?主备切换策略
  • Linux 学习 ------Linux 入门(上)
  • LINUX88 变量:命令定义;普通数组定义(复);declare -i /-x
  • 医防融合中心-智慧化慢病全程管理医疗AI系统开发(中)
  • (数据结构)链表
  • 从零开始构建【顺序表】:C语言实现与项目实战准备
  • Autosar AP中Promise和Future的异步消息通信的详细解析
  • 深入理解VideoToolbox:iOS/macOS视频硬编解码实战指南
  • FreeRTOS入门知识(初识RTOS)(二)
  • 2025-08-08 李沐深度学习11——深度学习计算
  • 【网络运维】Linux:MariaDB 数据库介绍及管理