限流系列之二:TDMQ CKafka 版限流方案詳解及最佳實踐

導語

在當今大數據和實時通信的時代,消息隊列在分布式系統中扮演著至關重要的角色。CKafka 作為一種高性能、高可靠的消息中間件,被廣泛應用于各種業務場景中。然而,隨著業務的增長和數據流量的增加,CKafka 在生產者和消費者以極高的速度生產/消費大量數據或產生請求時,可能會導致 Broker上資源的過度消耗,造成網絡 IO 飽和等問題。為了避免這種情況對全量業務產生影響,CKafka 設計了一套完善的限流方案。本文將詳細探討 CKafka 限流的相關內容,包括限流機制、最佳實踐方法以及常見問題的分析,幫助用戶更好地使用 CKafka,保障系統的穩定性和性能。

CKafka 限流方案概述

以售賣規格為 20MB 的實例為例:

CKafka 針對客戶使用場景和需求,通常至少為 3 節點部署,因此 20MB 的流量設計為每個節點承受 6.67MB 的讀和寫流量。為了發揮最大效能,在使用上建議設置的分區數盡量為節點的 2 - 3 倍,這樣可以使請求流量均衡地分布到各個節點上。

目前 CKafka 提供兩種層級的限流能力,限流能力分別如下:

集群級限流

寫限流:整體限制為 20MB/s,但考慮到副本因素,3 節點且單節點分配 6.67MB/s 的情況下,在單分區情況下寫入最大 6.67MB/s,單節點雙分區且計算副本流量時,最大寫入為 3.33MB/s。

讀限流:整體限制為 20MB/s,意味著客戶最多壓測到的消費流量(不計算副本)為 20MB/s 附近。

Topic 級限流

客戶可以根據自身需求配置 Topic 的限流。例如,對于 Topic:Test,2副本,可以配置寫入限流 7MB/s(已計算副本),消費限流 20MB/s。

CKafka 如何進行限流?

為保證服務的穩定性,CKafka 在消息出入上都做了流量管控。

用戶所有副本流量之和超過購買時的峰值流量時,會發生限流。

在生產端發生限流時,CKafka 會延長一個 TCP 鏈接的回應時間,延遲時間取決于用戶瞬時流量超過限制的大小。和道路交通管制的原理有點類似,流量超得越多,延時算法得出來的延時值越高,最高 5 分鐘。

在消費端發生限流時,CKafka 會縮小每次 fetch.request.max.bytes 的大小,控制消費端的流量。

CKafka 限流機制及原理

軟限流機制

CKafka 的限流機制是軟限流,即當用戶流量超過配額后,采用延時回包的方式進行處理,而不是給客戶端返回報錯。

以 API 限流為例,舉例如下:

硬限流:假設調用頻率為 100次/s,當每秒內客戶端調用超過 100 次時,服務端就會返回錯誤,客戶端就需要根據業務邏輯進行處理。

軟限流:假設調用頻率為 100次/s,正常耗時是 10ms。當每秒內客戶端調用超過 100 次時:

  • 如為 110 次,則本次請求耗時 20ms。

  • 如為 200 次,則耗時為 50ms。此時對客戶端就是友好的,不會因為突增流量或者流量波動產生報錯告警,業務可以正常進行。

綜上所述,在 Kafka 這種大流量的場景下,軟限流是更符合用戶體驗的。

購買帶寬和生產消費帶寬的關系:

  • 生產最大帶寬(每秒)= 購買帶寬 / 副本數

  • 消費最大帶寬(每秒)= 購買帶寬

延時回包限流原理

CKafka 實例的底層限流機制是基于令牌桶原理實現的。將每秒分為多個桶,每個時間桶的單位為 ms。

限流策略會把每秒(1000ms)均分為若干個時間桶。例如分為10個時間桶,每個桶的時間則為100ms。每個時間桶的限流閾值就是總實例規格速度的1/10。如果某個時間桶內的 TCP 請求流量超過了該時間桶的限流閾值,會根據內部限流算法增加該請求的延時回包時間,使客戶端無法快速收到 TCP 回包達到一段時間內的限流效果。

CKafka 限流最佳實踐

分區數的規劃與局部限流

由于 CKafka 實例采用多節點分布式部署,每個節點有固定的讀寫限流額度。為了提高流量使用率,客戶應保證分區數盡量維持節點數的倍數,使流量盡可能均衡。特殊場景(如指定消息的key會使寫入流量不均衡,但默認情況下 CKafka 的客戶端會盡可能按分區均衡流量發送到服務端),合理規劃分區數可以有效避免局部熱點問題帶來的局部限流問題。

實例限流次數與延時回包監控說明

限流次數統計

CKafka 的實例限流次數是各個節點限流次數之和,不代表整個實例的寫入和消費性能,也不代表所有節點都觸發了限流。當出現限流次數但限流流量整體低于規格值時,建議在高級監控中查看各個節點的限流次數統計,以確定是哪個節點出現了限流。

延時回包監控

遇到限流問題,需密切關注延遲回包時間。目前 CKafka 采用延遲回包策略,用戶可在專業版的高級監控中查看該指標,以便及時了解系統運行狀態。

寫入和消費限流模型的區別

由于生產涉及副本同步,所以要除以副本數;消費只從 Leader 上拉取數據,不需要除以副本數。具體計算為:單節點的最大寫入流量=規格值/節點數/副本數,單節點的消費流量=規格值/節點數。

關于偶發限流次數的應對

因為副本會占用寫入限流,更多副本意味著寫入流量會更低。限流實際是節點級別執行,監控是秒級,而客戶看到的監控是分鐘粒度,所以當整體寫入流量大于70%(除以副本)時,個別節點在秒級可能會出現局部限流,但通常不會持續很久。客戶可在高級監控節點限流查看具體超流量情況,若對響應時間要求較高,建議規格預留 30% 的 Buffer。

關于持續限流次數的處理

當實例出現限流次數,同時在高級監控中發現每個節點都持續出現限流,且實例的流量低于規格值 10% 以上,并排除了 Topic 限流規則的影響,這種情況不符合預期。針對此類問題,您可以提交工單尋求支持。

常見問題分析

監控生產/消費低于實例規格時觸發限流的原因

CKafka 限流以 ms 為單位,控制臺監控平臺數據按每秒采集,分鐘維度聚合。依據令牌桶原理,單個桶不強制限制流量。例如,當實例帶寬規格為 100MB/s,每個 100ms 時間桶限流閾值為 10MB/桶,若某秒第一個 100ms 時間桶達到 30MB(時間桶限流閾值的3倍),會觸發限流策略,增加延時回包時間。即使后續桶中流量減少,最終秒內流量速度仍可能因限流策略而低于實例規格。

生產/消費峰值流量高于實例規格的原因

同樣假設實例帶寬規格為 100MB/s,每個 100ms 時間桶限流閾值為 10MB。若某秒第一個 100ms 時間桶達到 70MB(時間桶限流閾值的 7 倍),會觸發限流策略,增加延時回包時間,當后續時間桶有流量涌入時,秒內流量速度可能高于實例規格。

限流次數暴增的原因

限流次數以 TCP 請求統計,若某秒第一個時間桶流量超標,該時間桶剩余時間內所有 TCP 請求都會被限制并統計限流次數。

CKafka 限流的判斷方法

健康度展示

在實例列表上,每個集群都有對應的健康度展示。當健康度顯示為“警告”字樣時,可以將鼠標移至其上查看彈出的詳細數據。這個數據會展示當前用戶的峰值流量以及發生限流的次數,用戶可以根據這里的數據判斷該實例是否發生過限流。

監控數據查看

用戶可以打開監控數據查看流量的最大值,如果 (流量的最大值 × 副本數) > 購買時的峰值帶寬,則表明至少發生過一次限流。可通過配置限流告警得知是否發生限流。

控制臺監控頁面

在 CKafka 控制臺的監控頁面查看實例監控,當限流次數大于 0,證明發生過限流。

總結

CKafka 的限流機制對于保障系統的穩定性和性能至關重要。通過合理規劃分區數、關注限流次數和延時回包監控、區別對待寫入和消費限流模型、預留適當的 Buffer 以及及時處理持續限流等問題,同時掌握常見問題的分析方法和限流的判斷技巧,用戶可以更好地使用 CKafka,避免因資源過度消耗而影響業務運行。在實際應用中,應根據具體業務場景和需求,靈活運用 CKafka 的限流功能,以達到最佳的使用效果。

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

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

相關文章

消息隊列的基本概念

文章目錄 為什么需要消息隊列?🤔🎯 核心價值📋 使用場景 🏗? 架構層面的基本概念整體架構圖📦 核心組件詳解1. Broker(消息代理)2. Topic(主題)3. Partition…

Shell腳本中和||語法解析

https://www.cnblogs.com/liuyuelinfighting/p/16377705.html 在 Shell 腳本中,&& 和 || 是邏輯操作符,用于根據前一個命令的退出狀態(成功或失敗)決定是否執行后續命令。這種語法稱為 命令鏈(Command Chainin…

MySQL中的常見運算符

精選專欄鏈接 🔗 MySQL技術筆記專欄Redis技術筆記專欄大模型搭建專欄Python學習筆記專欄深度學習算法專欄 歡迎訂閱,點贊+關注,每日精進1%,共攀技術高峰 更多內容持續更新中!希望能給大家帶來幫助~ &…

高級IO技術詳解:阻塞/非阻塞IO、多路復用與內存映射

高級IO技術詳解:阻塞/非阻塞IO、多路復用與內存映射 關鍵詞:阻塞IO 非阻塞IO select/poll/epoll mmap 一、阻塞IO vs 非阻塞IO 類型行為特點設置方式阻塞IO- 讀空管道阻塞- 寫滿管道阻塞默認模式非阻塞IO- 讀空文件返回 -1,errnoEAGAIN- 寫滿…

【無標題】拓撲對偶框架的嚴格性補完與哲學突破

拓撲對偶框架的嚴格性補完與哲學突破: 一、數學嚴格性補完:同調類守恒的解決方案 1.1 負系數問題的幾何化修正 **問題本質**:當 $a_i$ 含負數時,曲率分配 $\kappa\frac{2\pi a_i}{A_{\text{max}}}$ 導致偽黎曼流形 **解決方案…

從0開始學習R語言--Day25--A/B測試 vs 多臂老虎機

通常在比較兩個不同的方案對數據的影響時,我們會各拿50%的數據去進行對照試驗,這樣觀測到的結果會最大程度地保留統計學上的特點。但實際上,并不是所有對比不同方案都要這樣做,一來,我們需要等到兩組實驗都完全結束后&…

功耗高?加密弱?愛普特APT32F1023H8S6單片機 2μA待機+AES硬件加密破局

愛普特APT32F1023H8S6單片機深度解析 1. 產品定位 APT32F1023H8S6 是愛普特半導體(APT)推出的 32位高性能單片機,基于 ARM Cortex-M0內核,主打 高集成度、低功耗、高性價比,面向消費電子、工業控制和物聯網領域。 2. …

【MFC】繪制自定義控件-顯示圖片(支持放大操作)

目錄 一、CDC類(二級緩存)二、計算視口三、放大操作代碼中初始化操作(方便以后cv) 一、CDC類(二級緩存) CDC類是設備上下文的核心類,它的作用是抽象化對圖形輸出設備(像屏幕、打印機…

在Proteus新工程中放置基本元器件

視頻教程: [最詳細]Proteus新建第一個工程與快捷鍵設置 操作步驟 1選擇這個黃色的三角,然后點擊旁邊的P,開始找元件。 2點開P后,呈現如下圖界面,我們在Keyword欄中,輸入stm32,然后他會自動出現對應的元件&…

PRUD幣推動健康數據資產化,開啟Web3隱私金融新時代

在全球健康科技與數據主權浪潮下,PRUD幣(Prudential Utility & Data Token)正成為Web3健康金融領域中的重要通證。項目通過鏈上身份綁定、健康行為證明、隱私計算與NFT機制,為用戶打造了“健康數據資產化”的創新路徑&#xf…

Mac 安裝 finalshell

1.下載 地址:FinalShell官網 第一個進入選擇對應的 mac 版本下載。 下一步下一步完成安裝。 2.鏈接虛擬機,點擊圖示文件夾 點擊新建鏈接,新建 SSH 鏈接 3.去 vmware 中查詢 Linux 系統的 IP,使用 ip addr 命令或者 ifconfig 命令皆可。 ip…

Javaweb - 2 HTML

目錄 HTML 入門 1. HTML & CSS & JavaScript 的作用 2. 什么是 HTML 3. 什么是超文本 4. 什么是標記語言 5. HTML 基本結構 6. HTML 概念詞匯解釋 7. HTML 的一些語法規則 8. 開發工具 VsCode 安裝插件: 常見設置: HTML 常見標簽 …

CWGAN-GP 增強型 CAE 在非 IID 數據集中用于 5G-NR 干擾檢測

抽象 在不斷擴大的 5G-NR 無線蜂窩網絡領域中,無線干擾攻擊作為安全攻擊普遍存在,損害了接收信號的質量。我們通過將加性高斯白噪聲 (AWGN) 合并到真實世界的同相和正交 (I/Q) OFDM 數據集中來模擬干擾環境…

JavaEE-Spring-Web-Mvc

Spring Web MVC 是基于 Servlet API 構建的原始 Web 框架,從?開始就包含在 Spring 框架中。它的正式名稱“Spring Web MVC”來?其源模塊的名稱(Spring-webmvc),但它通常被稱為"Spring MVC". Servlet 是?種實現動態??的技術. 準確來講Serv…

Linux從入門到入門

系統教程學習類 Ubuntu 從入門到精通 系統頁面/基本操作類 Ubuntu20.04終端固定終端到左邊的導航欄_ubuntu20.04設置菜單固定-CSDN博客Ubuntu 20.04 系統5分鐘后老是自動鎖屏_修改鎖屏時間-CSDN博客 命令類 拷貝:將 下載 文件夾里的.sh文件 復制到opt目錄下 sudo cp…

AI自動生成Git提交信息-git AI Commit

在現代軟件開發中,編寫清晰且一致的Git提交信息對于維護項目歷史和促進團隊協作至關重要。然而,為每次變更手動撰寫描述性提交信息可能耗時,尤其是處理復雜差異或大型項目時。AI Commit 是一個利用AI分析Git差異并生成符合Conventional Commi…

【三大前端語言之一】樣式:CSS詳解

【三大前端語言之一】樣式:CSS詳解 在了解完HTML的有關知識后,我們應該知道,一個網頁光有框架還不行,必須還得有裝飾它的樣式。就好比房子的結構搭好了,但如果沒有油漆、沒有窗簾、沒有家具,就無法真正展現…

Spring AI 聊天記憶功能實戰(一):從接口設計到生產實踐

Spring AI 聊天記憶功能實戰(一):從接口設計到生產實踐 在構建AI對話應用時,聊天記憶管理及存儲是實現連貫上下文交互的關鍵組件。而大模型(LLM)本質上是無狀態的,這意味著它們不會保留歷史交互…

Element Plus 對話框 el-dialog 和 抽屜 el-drawer 的使用注意項(使用 div 包裹)

總結:使用 div 包裹!!! 詳細說明: 對話框 el-dialog 或 抽屜 el-drawer 樣式的設置說明: 要想有效設置 el-dialog 或 el-drawer 的樣式,需確保 el-dialog 或 el-drawer 的上層不是template&am…

【python】簡單演示 gateway、service、client的工作原理

gateway 看起來主要是做協議轉換的A gateway is a network node that acts as an entrance and exit point, connecting two networks that use different protocols. It allows data to flow between these networks, essentially acting as a translator between different c…