Kafka運維實戰 05 - kafka 消費者組和重平衡(Rebalance)

目錄

    • 什么是消費者組?
    • 消費者組如何工作?
    • 位移(Offset)
    • 消費者組的核心機制:重平衡(Rebalance)
      • 觸發條件
      • 重平衡影響

在消息隊列(如 Kafka)的世界里,消費者組是實現高效消息消費、負載均衡和高可用的核心機制。它并非單個消費者,而是由多個消費者組成的協同群體,能共同處理主題中的消息,既避免重復消費,又能應對流量波動。

什么是消費者組?

消費者組是指共同訂閱同一個主題(Topic) 的多個消費者的集合。每個消費者組都有一個唯一的標識(Group ID),組內的消費者通過協作分工,共同消費主題中的消息。
其核心特點包括:

  1. 組內消費者共享消費進度,由消息隊列的協調器(Coordinator) 統一管理。
  2. 主題中的每個分區(Partition) 只能被同一消費者組內的一個消費者消費(避免重復消費)。
  3. 消費者組之間相互獨立,不同組可以同時消費同一主題的消息(實現多場景消費)。

理想情況下,Consumer 實例的數量應該等于該 Group 訂閱主題的分區總數。

Kafka 僅僅使用 Consumer Group 這一種機制,卻同時實現了傳統消息引擎系統的兩大模型:如果所有實例都屬于同一個 Group,那么它實現的就是消息隊列模型;如果所有實例分別屬于不同的 Group,那么它實現的就是發布 / 訂閱模型。

消費者組如何工作?

消費者組的運行邏輯圍繞 “分區分配” 和 “消費進度同步” 展開,具體流程如下:

  1. 加入組:新消費者啟動時,會向協調器發送 “加入組” 請求,協調器收集組內所有消費者信息。
  2. 分配分區:協調器選擇一個消費者作為 “領導者(Leader)”,由其制定分區分配方案(如按范圍分配、輪詢分配等),確保每個分區只分配給組內一個消費者。
  3. 消費消息:消費者按分配到的分區消費消息,并定期向協調器提交消費偏移量(Offset)(記錄已消費到的位置)。
  4. 重平衡(Rebalance):當組內消費者數量變化(新增 / 下線)、主題分區數量變化時,協調器會觸發重平衡,重新分配分區,保證消費繼續。

位移(Offset)

消費者在消費的過程中需要記錄自己消費了多少數據,即消費位置信息。在 Kafka 中,這個位置信息有個專門的術語:位移(Offset)。

在新版本的 Consumer Group 中,Kafka 社區重新設計了 Consumer Group 的位移管理方式,采用了將位移保存在 Kafka 內部主題的方法。這個內部主題就是讓人既愛又恨的 __consumer_offsets。

將 Consumer 的位移數據作為一條條普通的 Kafka 消息,提交到 __consumer_offsets 中。可以這么說,__consumer_offsets 的主要作用是保存 Kafka 消費者的位移信息。

消費者組的核心機制:重平衡(Rebalance)

Rebalance 就是讓一個 Consumer Group 下所有的 Consumer 實例就如何消費訂閱主題的所有分區達成共識的過程。在 Rebalance 過程中,所有 Consumer 實例共同參與,在協調者組件的幫助下,完成訂閱主題分區的分配。但是,在整個過程中,所有實例都不能消費任何消息,因此它對 Consumer 的 TPS 影響很大。

觸發條件

重平衡是消費者組應對變化的關鍵機制,但也可能帶來問題,需要重點理解:

  • 觸發條件:
    • 消費者組內新增或移除消費者(如節點宕機、新實例啟動)。
    • 訂閱主題的分區數發生變更。Kafka 當前只能允許增加一個主題的分區數。當分區數增加時,就會觸發訂閱該主題的所有 Group 開啟 Rebalance。
    • 訂閱主題數發生變更。Consumer Group 可以使用正則表達式的方式訂閱主題,比如 consumer.subscribe(Pattern.compile(“t.*c”)) 就表明該 Group 訂閱所有以字母 t 開頭、字母 c 結尾的主題。在 Consumer Group 的運行過程中,你新創建了一個滿足這樣條件的主題,那么該 Group 就會發生 Rebalance。

假設目前某個 Consumer Group 下有兩個 Consumer,比如 A 和 B,當第三個成員 C 加入時,Kafka 會觸發 Rebalance,并根據默認的分配策略重新為 A、B 和 C 分配分區,如下圖所示
在這里插入圖片描述

重平衡影響

重平衡期間,所有消費者會暫停消費,等待 Rebalance 完成。導致消息處理延遲。
頻繁重平衡會嚴重影響消費效率,需盡量避免。

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

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

相關文章

Mysql-UDF提權

UDF(User Defined Function) 是用戶自定義函數,是 MySQL 支持的一種機制,可以通過 C語言寫動態鏈接庫(.so / .dll),然后讓 MySQL 調用這些函數,調用方式與一般系統自帶的函數相同&am…

車規級CANFD芯片在汽車車身控制方案中的應用解析

摘要:隨著汽車電子技術的不斷發展,汽車車身控制系統對信息傳輸的效率、可靠性及抗干擾能力等要求日益提高。車規級CANFD芯片作為一種先進的通信芯片,憑借其高速率、高可靠性以及強大的抗干擾能力,成為汽車車身控制系統中的關鍵組件…

docker desktop 訪問 https://registry-1.docker.io/v2/ 報錯問題解決

win11 docker desktop 配置國內鏡像加速器 1、win11管理員運行powershell notepad "$env:APPDATA\Docker\config.json"2、配置以下內容保存 {"registry-mirrors": ["https://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn&qu…

LLaMA-Factory微調教程1:LLaMA-Factory安裝及使用

文章目錄 環境搭建 LLaMA-Factory 安裝教程 模型大小選擇 環境搭建 Windows系統 RTX 4060 Ti(16G顯存) python 3.10 cuda=12.6 cudnn torch== 2.7.1+cu126 torchvision==0.22.1+cu126 torchaudio== 2.7.1+cu126 PS C:\Users\18098> nvidia-smi Tue Jul 22 01:52:19 2025 +…

Oracle數據庫索引性能機制深度解析:從數據結構到企業實踐的系統性知識體系

一、數據檢索的根本問題與索引產生的必然性 1.1、數據檢索的本質挑戰 在理解Oracle索引的性能優勢之前,必須回到數據檢索的根本問題。當面對海量數據時,傳統的線性搜索(Sequential Search)面臨著不可調和的性能瓶頸。這種瓶頸源于…

c#面向對象程序設計

一、面向對象與面向過程的核心區別(概念鋪墊)代碼背景開篇對比了兩種編程范式:面向過程(PP):按步驟分解問題(如 “輸入長→輸入寬→計算面積”);面向對象(OOP…

Kylin V10 4070安裝nvidia驅動+CUDA+docker安裝

目錄 1.系統版本信息 2.安裝nvidia驅動 3.CUDA安裝 4.docker離線安裝 1.系統版本信息 查看一下系統版本,命令為: cat /etc/kylin-release2.安裝nvidia驅動 編輯/usr/lib/modprobe.d/dist-blacklist.conf文件 blacklist nvidiafb加#號注釋掉 添加…

首家!數巔AskBI通過中國信通院數據分析智能體專項測試

近日,在中國信息通信研究院組織的數據分析智能體(Data Agent)專項測試中,數巔生成式分析智能體AskBI順利完成專項測試的全部內容。《數據智能體技術要求》標準及測試簡介中國信通院云計算與大數據研究所依托中國通信標準化協會大數…

一些Avalonia與WPF內容的對應關系和不同用法

UIElement、FrameworkElement和ControlWPFAvaloniaUIElementControlFrameworkElementControlControlTemplatedControl在 WPF 中,通過繼承 Control 類來創建新的模板控件,而在 Avalonia 中,從 TemplatedControl 繼承。在 WPF 中,通…

【REACT18.x】CRA+TS+ANTD5.X封裝自定義的hooks復用業務功能

模擬react中的hooks方法,實現自定義的hooks來封裝我們需要重復使用的組件,來優化代碼。這種hooks也是利用了react的原生hooks來實現我們需要的特定業務,可以返回任何我們需要的值,也可以不返回值,作為一個副作用方法使…

Vue CSR 到 Nuxt 3 SSR 遷移:技術實現與問題解決實錄

1. 遷移動機與技術選型1.1 CSR 架構的局限性 基于 Vue 3 和 Vite 構建的客戶端渲染 (CSR) 單頁應用 (SPA) 提供了良好的開發體驗和用戶交互流暢性。但是其核心局限在于:搜索引擎優化 (SEO):初始 HTML 響應僅包含一個根 div 元素,實際內容由 J…

FastGPT + Kymo:解鎖企業專屬知識庫與智能體開發新體驗

在信息爆炸的時代,企業如何讓知識“活起來”?傳統文檔庫和搜索框早已無法滿足需求。FastGPT——基于RAG技術的開源知識庫系統,正重新定義企業級知識管理! 一、FastGPT是什么? FastGPT是企業構建專屬知識庫的智能核心…

人形機器人_雙足行走動力學:Maxwell模型及在擬合肌腱特性中的應用

一、Maxwell模型及其在擬合肌腱特性中的應用Maxwell模型是經典的粘彈性力學模型之一,由彈簧(彈性元件)和阻尼器(粘性元件)串聯組成。其在生物力學領域的應用主要聚焦于材料的動態響應(如應力松弛和蠕變&…

「iOS」——KVC

源碼學習iOS底層學習:KVC 底層原理一、核心 API 與功能特性**常用方法**KVC 設值 底層原理KVC 取值 底層原理自定義KVC設值取值**特性:無隱私訪問****原理**四、多元應用場景1. **動態數據處理**(1)字典轉模型(2&#…

【Lucene】leafreadercontext邏輯段與segment物理磁盤段的關系

在 Lucene 中,“葉子段”(LeafReaderContext)和 “segment”(物理段)在 Lucene 語境下,LeafReaderContext ≈ segment 的運行時只讀視圖。概念 所在層次 含義 是否一一對應 segment 物理存儲層 Lucene 索引…

Python進階第三方庫之Matplotlib

應用Matplotlib的基本功能實現圖形顯示 應用Matplotlib實現多圖顯示 應用Matplotlib實現不同畫圖種類 1、什么是Matplotlib是專門用于開發2D圖表(包括3D圖表) 以漸進、交互式方式實現數據可視化 2、為什么要學習Matplotlib可視化是在整個數據挖掘的關鍵輔助工具,可以…

【深度解析】從AWS re_Invent 2025看云原生技術發展趨勢

2025 年 6 月 28 日 在科技浪潮持續翻涌的當下,云原生技術已然成為推動企業數字化轉型與創新發展的關鍵力量。而 AWS re:Invent 作為云計算領域一年一度的盛會,向來是展示前沿技術、洞察行業趨勢的重要舞臺。在今年的 AWS re:Invent 2025 大會上&#xf…

高亮標題里的某個關鍵字正則表達式

使用v-html渲染&#xff0c;寫一個高亮方法<span class"title-name" v-html"highlightKeywords(name, keywords)"></span>這里傳入的name帶了文件拓展名&#xff0c;所以先把名稱從文件名里提取出來// 高亮標題顏色highlightKeywords(name, ke…

視頻編解碼中colorspace,color_range,color_trc,color_primaries,是做什么用的,是誰來指定的

在視頻編解碼中&#xff0c;colorspace&#xff08;色彩空間&#xff09;、color_range&#xff08;色域范圍&#xff09;、color_trc&#xff08;傳輸特性&#xff09;、color_primaries&#xff08;原色&#xff09;是一組色彩相關元數據&#xff0c;它們共同決定了視頻的顏色…

【QT】 Qt背景介紹與概述

文章目錄&#x1f4dd;Qt背景介紹&#x1f320; 什么是Qt&#x1f309;Qt的發展史&#x1f320; Qt?持的平臺&#x1f309; Qt版本&#x1f309; Qt的優點&#x1f309; Qt的應?場景&#x1f320; Qt的成功案例&#x1f320; Qt的發展前景及就業分析&#x1f6a9;總結&#x…