限流系列之三:TDMQ for Apache Pulsar 限流技術深度解析

導語

在高速、高吞吐量的消息處理場景中,TDMQ Pulsar 版以其卓越的性能和可擴展性成為眾多企業的首選。然而,隨著生產者和消費者以極高的速度生產/消費大量消息,服務器資源如 CPU、內存、網絡及磁盤 IO 等可能會面臨飽和風險。為此,TDMQ Pulsar 版設計了完善的限流機制,以保護集群資源,確保系統的全局穩定性。本文將深入探討 TDMQ Pulsar 版的集群級與主題分區限流技術,并提供實踐指南。

為什么要做限流?

在 TDMQ Pulsar 版集群的運行過程中,生產者和消費者的高速運作猶如一把雙刃劍,在帶來高效數據傳輸的同時,也對服務端資源造成了巨大的壓力。當它們以極高的速度生產和消費大量消息時,服務端的 CPU 需要不斷地處理這些消息的生產和消費請求,磁盤需要存儲大量的消息數據以及相關的元數據信息,網絡磁盤 IO 則需要頻繁地進行數據的讀寫操作,以保證消息的持久化存儲和快速傳輸。如果不對這些操作進行限制,很容易導致 CPU 使用率飆升,內存耗盡,網絡磁盤 IO 飽和,進而影響整個集群的性能和穩定性。

這種資源飽和的情況可能會引發一系列嚴重的問題。例如,CPU 過度繁忙會導致消息處理延遲增加,使得生產者發送消息的耗時大幅增長,甚至出現發送超時的情況;內存不足可能會導致消息丟失或者數據處理錯誤;網絡磁盤 IO 瓶頸則會導致消息堆積,嚴重時可能會使整個集群陷入癱瘓狀態。為了避免這些問題的發生,確保集群在高負載情況下仍能穩定運行,TDMQ Pulsar 版設計了一套完整的限流方案。

TDMQ Pulsar 版限流機制淺談

TDMQ Pulsar 版支持兩種維度的限流:集群級分布式限流和主題分區限流。這兩種限流機制就像是為 TDMQ Pulsar 版集群安裝了兩道堅固的 “安全閥”,確保集群在高負載情況下仍能穩定運行。

  • 集群級分布式限流:適用于 TDMQ Pulsar 版專業集群。通過按照實例規格設置不同的限流閾值,對整個集群進行自我保護,避免因為資源消耗過高影響集群質量,造成全局穩定性風險。

  • 主題分區限流:適用于所有類型的 TDMQ Pulsar 版集群。對每個主題分區的生產和消費速率進行限制。

集群級分布式限流:秒級窗口的自我保護機制

限流機制

TDMQ Pulsar 版的生產限流機制采用了一種獨特的延遲回包方式,這種方式就像是在消息傳輸的道路上設置了一個 “紅綠燈”,通過控制消息的處理節奏來實現限流。其限流的統計窗口被設定為 1 秒,這是一個關鍵的時間單位,所有的限流統計和控制都在這個時間窗口內進行。

以生產 TPS 限流為例,假設我們將生產 TPS 設置為 100,這就意味著在 1 秒的時間內,系統最多處理 100 個消息。當用戶在 1 秒中的前 400ms 發送了 100 個消息時,此時已經達到了設定的 TPS 閾值。那么第 101 個消息發送的請求就會遇到 “紅燈”,它需要等待 600ms 后才能被處理。

  • 從生產者的角度來看,當出現生產限流時,由于消息需要等待處理,發送消息的耗時必然會增加。如果等待時間過長,就可能出現發送超時的情況。

  • 從消費者的角度來看,當發生消費限流時,消息從生產到消費的整體鏈路時延會增加。這就可能導致消息在隊列中堆積,影響整個數據處理流程的效率。

限流原理

在這里插入圖片描述

生產端

生產端的限流原理是基于 1 秒的統計窗口來實現的。當統計窗口內的配額被用盡時,服務端會將生產者的 Channel 全部關閉。直到下一個時間窗口到來,服務端才會重新打開生產者的 Channel,重新允許處理消息發送請求。

消費端

消費端的限流原理同樣基于 1 秒的統計窗口。當統計窗口內的配額被用盡時,服務端會停止推送消息到消費者。消費者在這段時間內無法接收到新的消息,直到下一個時間窗口,服務端恢復推送消息,消費者才能繼續進行消費操作。

需要注意的是,生產端限流后關閉 Channel,具體來說就是當生產出現限流后,服務端會將生產者對應的 TCP 連接通道關閉。關閉后,服務端就不再接受對應 TCP 連接的請求,直到 TCP 連接通道被再次打開。

實踐教程

合理選購集群規格:用戶應深入了解業務實際的峰值生產 / 消費量,這需要對業務的歷史數據進行詳細分析,預測未來的業務增長趨勢。根據生產消費的扇出比例,科學合理地設置限流的生產 / 消費分配比例。在正式上線前,務必做好壓測工作,通過模擬真實的業務場景和負載情況,提前評估集群容量是否能夠滿足業務需求。

避免延遲消息字段設置錯誤:如果業務發送的是非延遲消息,一定要注意不要設置延遲消息字段。因為一旦發送端設置了延遲消息字段,無論設置的延遲時間是多久,服務端都會按照延遲消息統計速率。以 Java 為例(GO 等其他 SDK 也類似),只要在發送消息的時候,設置了 DeliverAfter 或者 DeliverAt,就會被認為是延遲消息,即使里面的值為 0 或者小于當前時間。

配置集群的生產/消費的速率和帶寬的告警:當集群的生產 / 消費的速率和帶寬超過設置規格的 80% 時,建議及時升配專業版實例規格,以避免限流帶來的耗時增加的風險。

配置生產 / 消費的限流次數的告警:當出現限流的時候,表示在秒級的窗口內存在生產 / 消費超限的情況,這時候也建議及時升配專業版實例的規格,避免限流帶來耗時增加的風險。

常見現象說明

問題1:為什么生產/消費低于規格時會觸發限流?

如上面限流原理所述,限流是以 秒(s) 為單位的,控制臺監控平臺數據是按分鐘(min)維度采集上報。監控平臺上的生產/消費的統計值的計算公式是 [1min內消息量/60]。當客戶端生產消費的量在 1min 內分布不均衡的時候,可能集中在 1min 內的 1 秒或者幾秒的時間窗口內生產/消費量很高,超過限流窗口中的配額,其他時間遠低于限流窗口配額,這種情況下,監控到的生產/消費低于實例規格,但是觸發了限流。

問題2:為什么生產/消費峰值會高于實例規格?

  • 情況1:TDMQ Pulsar 版是分布式系統,一個 TDMQ Pulsar 版節點由多個 Broker 節點組成,同一個時間點(一個限流窗口內),限流是由各個節點進行的,每個節點的限流閾值是當前集群剩余閾值。例如集群限流閾值 1000,Broker 節點數量為5,當實際使用量為 750 的時候(假設此時每個節點的使用量均勻,都是 150),每個節點此時的限流閾值是 400(150 + 1000-750)。此時,實際上瞬時能達到的流量可能到 2000(400*5),這樣,一個限流窗口內可能出現超過規格的情況。

  • 情況2:如上面限流原理所述,當出現限流后,會將寫的通道關閉,但是當前的請求(即使已經超過了限流閾值)還是會繼續處理,所以,當并發請求較高的情況下,可能出現一個統計窗口內超過限流閾值的情況。

問題3:如何判斷 TDMQ Pulsar 版是否發生限流?

在 TDMQ Pulsar 版專業集群控制臺的集群監控頁面查看集群監控信息,當限流次數大于 0,證明發生過限流。

主題分區限流:細粒度的流量管控

限流原理

主題分區限流在 TDMQ Pulsar 版的消息處理體系中扮演著重要的角色,它如同一個精密的流量調節閥,對每個主題分區的生產和消費速率進行精細管控,確保整個系統在高負載情況下仍能穩定、高效地運行。與集群級分布式限流不同,主題分區限流適用于所有類型的 TDMQ Pulsar 版集群,為各種規模和應用場景的集群提供了統一的流量控制保障。

生產端

生產端的限流邏輯依賴于內部的定時任務,這個定時任務默認每 50ms 執行一輪,檢查每個分區在 1 秒的時間窗口內生產的消息量是否超過了預設的配額。

當檢測到某個分區的生產配額被用盡,即出現限流情況時,服務端會采用軟限流的方式進行處理。具體來說,服務端會關閉主題對應生產者的讀 Channel,不再處理生產請求。不過,這種關閉并非永久性的,至多等待 1 秒后,服務端會重新恢復生產者的讀 Channel,允許生產者繼續處理發送消息的請求,直到再次出現限流。

從客戶端的角度來看,當出現限流后,由于消息發送請求需要等待讀 Channel 恢復才能被處理,發送耗時必然會增加。如果等待時間過長,就可能出現發送超時的情況。

消費端

消費端的限流邏輯同樣是基于 1 秒的時間窗口,統計消費的 TPS 和帶寬是否超過了配額。

當出現限流時,服務端會在 1 秒內停止推送消息到消費者。消費者在這段時間內無法接收到新的消息,這會導致消息從生產端到消費端的整體時延增加,因為消息在服務端被暫時扣留,無法及時傳遞到消費者手中。如果限流情況持續存在,就可能出現消息堆積的情況。

實踐教程

  • 合理擴容分區:單主題分區有生產 / 消費的 TPS 和帶寬限制,如果主題的 TPS / 帶寬并發比較大,需要適當擴容分區。

  • 配置告警:配置主題的生產 / 消費的速率和流量已使用配額百分百的告警,當超過 80%,建議擴容分區數量,避免觸發單主題分區限流。

常見現象說明

為什么分區的生產/消費流量可以超過限流閾值?

如上面限流原理所述,主題分區的限流采用的是非精確軟限制的限流算法,結合生產端和消費端的限流邏輯,生產和消費都可能出現流量超過限流閾值的情況。

結語

TDMQ Pulsar 版的限流技術是保障其在復雜業務場景下穩定運行的關鍵因素。在實際應用中,用戶需要深入理解限流機制的原理和特點,根據業務的實際需求和流量模式,合理地配置限流參數,如生產 / 消費速率、帶寬限制、配額等。同時,要充分利用實踐教程中的建議,做好集群規格的選擇、告警配置以及分區擴容等工作,以確保系統在高負載情況下仍能保持高效、穩定的運行。

此外,對于常見現象的理解和應對也是至關重要的。通過對生產 / 消費帶寬低于實例規格時觸發限流、生產 / 消費峰值高于實例規格以及如何判斷限流等問題的深入分析,用戶能夠更好地排查和解決實際應用中可能出現的問題,提高系統的可靠性和可用性。總之,合理運用 TDMQ Pulsar 版的限流技術,能夠為分布式應用系統提供更加可靠的消息通信保障,助力業務的穩健發展。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87809.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87809.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87809.shtml

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

相關文章

非研發部門參與產品開發過程的價值體現

漢捷咨詢 胡紅衛 企業已經越來越意識到新產品開發項目需要市場、銷售、制造、采購、服務、財務等非研發部門的參與,嘗試建立跨部門的項目組,安排相關人員參與項目,但是效果如何呢?在漢捷咨詢對很多企業調研診斷過程中,…

Kafka的存儲與索引:數據處理的底層奧秘

一、引言 Kafka 之所以能在海量數據的傳輸和處理過程中保持高效的性能和低延遲,背后隱藏著眾多精妙的設計,而其存儲與索引機制便是其中的核心奧秘。接下來,讓我們深入探尋 Kafka 存儲機制的基石與架構。 二、分區與日志組織? Kafka 中的消…

大模型與搜索引擎的技術博弈及未來智能范式演進

基于認知革命與技術替代的全景綜述 一、大模型對搜索引擎的替代性分析:技術范式與市場重構 (1)技術原理的代際分野 傳統搜索引擎遵循 "爬蟲抓取 - 索引構建 - 關鍵詞排序" 的三段式架構,其核心是基于 PageRank 算法的…

XC7K325T數據采集卡設計原理圖:786-基于X86 CPU+XC7K325T的16路16bit 1M sps同步數據采集卡

基于X86 CPUXC7K325T的16路16bit 1M sps同步數據采集卡 一、板卡概述 板卡為緊湊型的X86FPGA的工業監測處理平臺,高度集成的硬件和完整的labview開發軟件,大大方便客戶現場使用。 二、板卡功能 板卡功能 參數內容 X86 SOM核心板 主頻 2.0GHz …

單片機3種按鍵程序消抖方法

1,查詢法延時模式 u8 key01;u8 x0;KEY1;while(1){if(KEY0) //"按鍵按下"{delay(10); //延時10msif(KEY0 && kdy01) //按下有10ms 且上狀態是1。即下降沿時{key00; //將上狀態置0.防止按住不放時&#xff0…

【java面試】線程篇

【java面試】線程篇 一、基礎知識1 線程與進程的區別2 并行與并發的區別3 創建線程的方式4 線程包含了哪些狀態,狀態之間是如何變化的?5 新建三個線程,如何保證他們按照順序執行?6、java中的wait和sleep方法的不同7 如何停止一個正…

RAGFlow是一個基于深度文檔理解的開源RAG引擎

RAGFlow概述 RAGFlow是一款基于深度文檔理解的開源RAG(檢索增強生成)引擎,專注于處理復雜文檔結構并提供精準的語義檢索與生成能力。其核心優勢在于結合多模態文檔解析和智能分段技術,優化傳統RAG流程中的信息提取與答案生成效果…

Git Commit 模板完整配置指南

Git Commit 模板完整配置指南 📋 目錄 Git Commit 模板完整配置指南 📋 目錄🎯 為什么需要 Commit 模板📝 推薦的 Commit 模板 標準模板格式C 項目特化模板 ?? 系統級配置 1. 創建模板文件2. 配置 Git 使用模板3. 驗證配置 &a…

【ELK服務搭建】

Ubuntu 20.04環境下部署Elastic Stack 8.18日志系統完整指南 一、環境準備 系統要求 Ubuntu 20.04 LTS硬件配置:4核CPU / 8GB內存 / 100GB硬盤網絡:需外網訪問權限 1. 基礎環境配置 首先安裝SSH服務以便遠程管理: # 更新軟件源 apt u…

Mac電腦 Office 2024 LTSC 長期支持版(Excel、Word、PPT)

Office 2024 mac,是一款是一款專為蘋果電腦用戶設計的高性能、高安全性的辦公套裝 集成了Word、Excel、PowerPoint、Outlook等經典應用,為用戶提供了一站式的辦公解決方案。 不僅繼承了Office系列一貫的卓越性能,還在功能性和用戶體驗上進行…

深入解析 Schema 在不同數據庫中的百變面孔

在數據庫的世界里,數據是核心資產,但如何高效、有序、安全地組織和理解這些數據?答案就是 Schema(模式或架構)。它如同建筑的圖紙、樂隊的樂譜,是數據庫的設計藍圖和運行規則手冊。今天,我們就來…

Python 數據分析與可視化 Day 2 - 數據清洗基礎

🎯 今日目標 學會識別和處理缺失數據(NaN)學會刪除/填補缺失值清理重復數據修改列類型,準備數據分析 🧼 一、缺失值處理(NaN) ? 1. 檢查缺失值 import pandas as pd df pd.read_csv("…

3DS中文游戲全集下載 任天堂3DS簡介3DS第一方獨占游戲推薦

任天堂3DS 的詳細介紹,涵蓋其硬件特性、核心功能、游戲陣容及歷史地位: 3DS游戲全集下載 https://pan.quark.cn/s/dd40e47387e7 https://sink-698.pages.dev/3ds CIA CCA 等格式可用于3DS模擬器和3DS實體機 3DS 是什么? 全稱:Nin…

【Python小練習】3D散點圖

資產風險收益三維分析 背景 王老師是一名金融工程研究員,需要對多個資產的預期收益、風險(波動率)和與市場的相關性進行綜合分析,以便為投資組合優化提供決策依據。 代碼實現 import matplotlib.pyplot as plt from mpl_toolk…

安寶特案例丨突破傳統手術室,Vuzix AR 眼鏡圓滿助力全膝關節置換術

在巴西圣保羅醫院的手術室里,骨科權威 Ricardo Gobbi醫生正戴著 安寶特 Vuzix 智能 AR 眼鏡,為一位膝關節炎患者實施全膝關節置換術。與傳統手術不同的是,他的視野中實時疊加著骨骼三維模型、切割路徑標線和動態數據 —— 這并非科幻場景&…

qt設置文件自動保存-cnblog

步驟: 「工具」->「選項」->「環境」->「Auto-save modified files」。 可開啟/關閉自動保存文件功能,還可設置自動保存時間的間隔(最短間隔1分鐘)。 鐘)。

linux下如何找到dump文件被生成到哪里了

在大多數 Linux 系統中,核心轉儲文件(core dump)通常由系統自動保存在當前工作目錄下,或者由配置決定其保存位置。核心轉儲文件的默認文件名通常包含進程 ID(PID)和程序名,例如 core.PID 或 cor…

API 調試工具校驗 JSON Mock 接口(一):無參請求與基礎響應驗證

在前后端分離的開發模式中,JSON Mock 工具為前端開發人員在后端接口未就緒時提供了極大便利,能夠模擬返回 JSON 數據的 API 接口,實現前端獨立開發與測試。而 API 開發調試工具 作為一款強大的接口測試工具,可進一步對這些 Mock 接…

單體架構、微服務架構和分布式架構的區別

. 架構定義與核心特征 1.1 單體架構(Monolithic Architecture) 單體架構是將所有功能模塊集中在一個單一代碼庫中的傳統架構模式: 所有功能(UI層、業務邏輯、數據訪問)打包為單一部署單元通常使用單一技術棧開發(如Spring Boot、Django等)共享單一數據庫實例進程內通信(方法…

如何重新安裝 Rust

在開發過程中,我們有時可能需要重新安裝 Rust,比如遇到版本沖突、環境配置錯誤,或者僅僅是想更新到最新版本。本文將詳細介紹如何卸載現有 Rust 安裝,并重新安裝 Rust,同時還會介紹一些常見的配置技巧,幫助…