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.pswp.cn/bicheng/92500.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/92500.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/92500.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

力扣 hot100 Day69

287. 尋找重復數 給定一個包含 n 1 個整數的數組 nums ,其數字都在 [1, n] 范圍內(包括 1 和 n),可知至少存在一個重復的整數。 假設 nums 只有 一個重復的整數 ,返回 這個重復的數 。 你設計的解決方案必須 不修改…

Android 的CameraX的使用(配置,預覽,拍照,圖像分析,錄視頻)

Android Studio 版本號:2024.1.2 CameraX是Jetpack系列中的一個庫,它基于Camera2 API構建,但提供了更高層次的抽象。 CameraX 三大核心用例: Preview預覽 ,ImageCapture拍照和 VideoCapture錄視頻 一、創建項目,進行環境配置 CameraX 需要一些屬于 Java 8 的方法,因此…

【機器學習深度學習】微調訓練數據質量

目錄 前言 一、為什么數據質量評估很重要 二、數據質量評估的核心維度 三、數據質量的可量化維度(必須要測的指標) 四、多答案、多類型數據的取舍與優化 場景 A:一個問題有多個相似回答 場景 B:多個類型數據,每…

從DeepSeek-V3到Kimi K2,大型語言模型架構對比

文章目錄 摘要 **稀疏化與專家系統** **注意力機制優化** **歸一化與穩定性設計** 模型架構對比詳析 DeepSeek-V3 vs Llama 4 Maverick Qwen3 vs SmolLM3 Kimi 2的突破 1 DeepSeek V3/R1 1.1 多頭潛在注意力(MLA) 1.2 混合專家系統(MoE) 1.3 DeepSeek 總結 2 OLMo 2 2.1 歸…

Unity筆記(二)——Time、Vector3、位置位移、角度、旋轉、縮放、看向

寫在前面寫本系列的目的(自用)是回顧已經學過的知識、記錄新學習的知識或是記錄心得理解,方便自己以后快速復習,減少遺忘。這里只有部分語法知識。五、Time時間相關1、時間縮放比例概念:可以通過UnityEngine.Time類的timeScale屬性控制游戲時…

vue+vite項目中怎么定義一個環境變量可以在開發環境和生產環境使用不同的值,并且可以在vue頁面和index.html通用。

首先我們需要下載一個插件vite-plugin-html然后再項目最外層和index.html同級目錄下新建.env.development和.env.production兩個項目并且定義你想要的環境變量名:注意要以VITE_開頭VITE_APP_MAP_TOKEN1233444然后vite.config.js文件import { defineConfig,loadEnv } from vite…

Python-深度學習--2信息熵,條件熵(ID3決策樹),KL散度

一、信息熵(Entropy)的計算與應用信息熵用于衡量一個概率分布的不確定性,值越大表示分布越分散(不確定性越高)。1. 數學定義對于離散概率分布 P,信息熵公式為:(通常以 2 為底單位是比…

國產化Word處理控件Spire.Doc教程:Python提取Word文檔中的文本、圖片、表格等

在現代辦公場景中,Word文檔已成為信息存儲與交流的重要載體,承載著關鍵的業務數據、結構化表格、可視化圖表以及協作批注等重要內容。面對日益增長的文檔處理需求,傳統的人工操作方式已難以滿足效率與準確性的雙重標準。采用Python實現Word文…

Spring IOC 原理

Spring IoC(控制反轉)是Spring框架的核心機制,其原理是通過容器管理對象生命周期和依賴關系,實現解耦。 1. 控制反轉(IoC)核心思想 傳統模式:對象主動創建依賴(如new Service()&…

VSCode:基礎使用 / 使用積累

官網 Visual Studio Code - Code Editing. Redefined 記錄一、更新依賴 嘗試刪除yarn.lock文件 記錄二、“解決沖突”的方式變了 更新后,“解決沖突”的方式變了,有的時候能選中兩者,有的時候不能 現在又更新了,回復到了原來…

tcp 確認應答和超時時間

1. 確認應答之間的時間(RTT)這是指 從發送方發送數據到接收方返回確認(ACK)之間的時間。它反映的是數據傳輸的 往返延遲。例如,發送方發送一個數據包,接收方收到后,回傳一個確認包(A…

圖的應用-最短路徑

最短路徑的典型用途:交通網絡的問題——從甲地到乙地之間是否有公路連通?在有多條通路的情況下,哪一條路最短?交通網絡用有向網來表示:頂點——表示地點,弧——表示兩個地點有路連通,弧上的權值…

【qt5_study】1.Hello world

模板 作為初學者我們選擇第一個Application(Qt)和 Qt Widgets Application,所謂的模板就是 Qt為了方便開發程序,在新建工程時可以讓用戶基于一種模板來編寫程序,包括 cpp文件, ui文件都已經快速的創建,而不用用戶手動創建這些文件。 基類 這里默認選擇的基類為 QMainWin…

項目構想|文生圖小程序

Date: August 4, 2025項目介紹 👋,我們通過 Vibe Coding 做一個文字生成圖片的小程序。 我們會從需求分析、技術選型、UI設計、項目構筑到最后打包,一路嘗試 Vibe Coding 實現。 創建項目 創建文件夾:ai-pic-mini-app 采用 Git 進…

TiDB/MongoDB/Taosdb存儲引擎概覽

數據庫類型存儲引擎數據結構源碼位置tidbRockDBLSM樹https://github.com/facebook/rocksdbmongodbWiredTigerB 樹/LSM樹https://github.com/wiredtiger/wiredtigerTDengineTSDBBRINhttps://github.com/taosdata/TDengine 1、tidb存儲引擎概覽 LSM樹數據結構描述LSM樹(Log Str…

qt窗口--01

文章目錄qt窗口--01窗口概覽菜單欄工具欄狀態欄浮動窗口子窗口對話框model結語很高興和大家見面,給生活加點impetus!!開啟今天的編程之路!! 作者:?( ‘ω’ )?260 我的專欄:qt,Li…

Neo4j 社區版 Mac 安裝教程

最近用到了nebulagraph圖數據庫做金融反欺詐項目,雖然nebula屬于分布式架構,但依然感覺nebula使用不太順手,這里順便研究一下neo4j這款數據庫如何,這里先從安裝開始? 一、 準備工作 確認 Java 版本要求: N…

Android Studio(2025.1.2)Gemini Agent 使用指南

Android Studio(2025.1.2)Gemini Agent 使用指南 文章目錄Android Studio(2025.1.2)Gemini Agent 使用指南1. 什么是 Gemini Agent?2. 如何啟用和配置 Gemini Agent2.1 獲取 API Key2.2 在 Android Studio 中配置3. 實…

計算機視覺--opencv(代碼詳細教程)

在計算機視覺的廣袤領域中,OpenCV 是一座極為關鍵的里程碑。無論是在前沿的學術研究,還是在蓬勃發展的工業界,OpenCV 憑借其強大的功能與高效的性能,為開發者提供了豐富的圖像處理和計算機視覺算法,助力無數項目落地。…

Centos6停止服務后yum改用阿里云

環境: OS:Centos 6.9 1.進入到yum配置目錄 cd /etc/yum.repos.d 2.備份 cp CentOS-Base.repo CentOS-Base.repo.bk 3.下載 wget -O CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-6.repo 問題1: 因為Centos-6早就停止了更新維護,阿里云鏡像網站將其倉庫…