分布式 - 消息隊列Kafka:Kafka消費者和消費者組

文章目錄

      • 1. Kafka 消費者是什么?
      • 2. Kafka 消費者組的概念?
      • 3. Kafka 消費者和消費者組有什么關系?
      • 4. Kafka 多個消費者如何同時消費一個分區?

1. Kafka 消費者是什么?

消費者負責訂閱Kafka中的主題,并且從訂閱的主題上拉取消息。與其他一些消息中間件不同的是:在Kafka的消費理念中還有一層消費組的概念,每個消費者都有一個對應的消費組。當消息發布到主題后,只會被投遞給訂閱它的每個消費組中的一個消費者。

2. Kafka 消費者組的概念?

假設我們有一個應用程序,它從一個Kafka主題讀取消息,在對這些消息做一些驗證后再把它們保存起來。應用程序需要創建一個消費者對象,訂閱主題并開始接收消息、驗證消息和保存結果。但過了一陣子,生產者向主題寫入消息的速度超過了應用程序驗證數據的速度,這時候該怎么辦呢?如果只使用單個消費者來處理消息,那么應用程序會遠遠跟不上消息生成的速度。顯然,此時很有必要對消費者進行橫向伸縮。就像多個生產者可以向相同的主題寫入消息一樣,也可以讓多個消費者從同一個主題讀取消息。

Kafka消費者從屬于消費者群組。一個群組里的消費者訂閱的是同一個主題,每個消費者負責讀取這個主題的部分消息。

① 假設主題T1有4個分區,我們創建了消費者C1,它是群組G1中唯一的消費者,用于訂閱主題T1。消費者C1將收到主題T1全部4個分區的消息。

② 如果在群組G1里新增一個消費者C2,那么每個消費者將接收到兩個分區的消息。假設消費者C1接收分區0和分區2的消息,消費者C2接收分區1和分區3的消息。

③ 如果群組G1有4個消費者,那么每個消費者將可以分配到一個分區。

在這里插入圖片描述

④ 如果向群組里添加更多的消費者,以致超過了主題的分區數量,那么就會有一部分消費者處于空閑狀態,不會接收到任何消息。

向群組里添加消費者是橫向擴展數據處理能力的主要方式。Kafka消費者經常需要執行一些高延遲的操作,比如把數據寫到數據庫或用數據做一些比較耗時的計算。在這些情況下,單個消費者無法跟上數據生成的速度,因此可以增加更多的消費者來分擔負載,讓每個消費者只處理部分分區的消息,這是橫向擴展消費者的主要方式。于是,我們可以為主題創建大量的分區,當負載急劇增長時,可以加入更多的消費者。不過需要注意的是,不要讓消費者的數量超過主題分區的數量,因為多余的消費者只會被閑置。

⑤ 除了通過增加消費者數量來橫向伸縮單個應用程序,我們還經常遇到多個應用程序從同一個主題讀取數據的情況。實際上,Kafka的一個主要設計目標是讓Kafka主題里的數據能夠滿足企業各種應用場景的需求。在這些應用場景中,我們希望每一個應用程序都能獲取到所有的消息,而不只是其中的一部分。只要保證每個應用程序都有自己的消費者群組就可以讓它們獲取到所有的消息。不同于傳統的消息系統,橫向伸縮消費者和消費者群組并不會導致Kafka性能下降。

在之前的例子中,如果新增一個只包含一個消費者的群組G2,那么這個消費者將接收到主題T1的所有消息,與群組G1之間互不影響。群組G2可以增加更多的消費者,每個消費者會讀取若干個分區,就像群組G1里的消費者那樣。作為整體來說,群組G2還是會收到所有消息,不管有沒有其他群組存在。

在這里插入圖片描述

總的來說,就是為每一個需要獲取主題全部消息的應用程序創建一個消費者群組,然后向群組里添加更多的消費者來擴展讀取能力和處理能力,讓群組里的每個消費者只處理一部分消息。

3. Kafka 消費者和消費者組有什么關系?

消費者組是一個邏輯上的概念,它將旗下的消費者歸為一類,每一個消費者只屬于一個消費者組。每一個消費組都會有一個固定的名稱,消費者在進行消費前需要指定其所屬消費者組的名稱,這個可以通過消費者客戶端參數group.id來配置,默認值為空字符串。 消費者組內每個消費者負責消費不同分區的數據,一個分區只能由同一個消費者組內的一個消費者來消費。

消費者組的作用是實現負載均衡和容錯性,因為每個消費者只能讀取主題中的一部分消息,而消費者組中的所有消費者共同讀取整個主題中的所有消息。

4. Kafka 多個消費者如何同時消費一個分區?

Kafka 中的每個分區只能被一個消費者消費,如果多個Kafka消費者要同時消費相同主題下相同分區的數據,需要將它們放到不同的消費者組中。在Kafka中,一個消費者組中的每個消費者會消費主題下不同分區的消息,而不同消費者組中的消費者則可以同時消費相同分區的數據。這樣可以實現多個消費者同時消費相同分區的數據,提高消費效率和可靠性。同時,Kafka還提供了一些負載均衡策略,可以根據消費者組中消費者的數量和消費能力來自動分配Partition,以實現更好的負載均衡。

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

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

相關文章

【數據結構OJ題】反轉鏈表

原題鏈接:https://leetcode.cn/problems/reverse-linked-list/description/ 目錄 1. 題目描述 2. 思路分析 3. 代碼實現 1. 題目描述 2. 思路分析 方法一:三指針翻轉法 使用三個結構體指針n1,n2,n3,原地修改結點…

VSCode如何設置高亮

一、概述 本文主要介紹在 VSCode 看代碼時,怎樣使某個單詞高亮顯示,主要通過以下三步實現: 安裝 highlight-words 插件 配置 highlight-words 插件 設置高亮快捷鍵F8 工作是嵌入式開發的,代碼主要是C/C的,之前一直用…

【Linux】高級IO

目錄 IO的基本概念 釣魚五人組 五種IO模型 高級IO重要概念 同步通信 VS 異步通信 阻塞 VS 非阻塞 其他高級IO 阻塞IO 非阻塞IO IO的基本概念 什么是IO? I/O(input/output)也就是輸入和輸出,在著名的馮諾依曼體系結構當中…

ROS學習筆記(三)---好用的終端Terminator

ROS學習筆記文章目錄 01. ROS學習筆記(一)—Linux安裝VScode 02. ROS學習筆記(二)—使用 VScode 開發 ROS 的Python程序(簡例) 一、Terminator是什么? 在前面的學習中,為了運行hello.py我是在vscode頻繁的點擊運行窗口的“”號…

智谷星圖趙俊:讓人才和區塊鏈產業“雙向奔赴”丨對話MVP

區塊鏈產業需要什么樣的人才?趙俊很有發言權。 趙俊是北京智谷星圖科技有限公司的技術總監,也是FISCO BCOS官方認證講師。他2017年接觸區塊鏈,隨后選擇人才培育領域深耕。“為區塊鏈行業引進更多人才這件事很有價值,跟我的職業理…

菜單和內容滾動的聯動原理及代碼

之前寫代碼有個需求:左側是一個菜單,右邊是內容,點擊左側菜單右邊內容滾動到對應位置,右邊內容滾動到某位置時,左側菜單也會選中對應的菜單項。UI如下:這是大多網站的移動端都會有的需求。 解決方案一&…

高憶管理:什么是一碼通?有什么好處?

在經過券商開戶后,除了其間的財物賬戶、滬深股賬戶外,還有一個一碼通賬戶,什么是一碼通?它有什么好處?關于這些,高憶管理為大家預備了以下參閱內容。 什么是一碼通? 一碼通賬戶,一般…

CSDN編程題-每日一練(2023-08-15)

CSDN編程題-每日一練(2023-08-15) 一、題目名稱:新型美麗數列二、題目名稱:會議安排三、題目名稱:小豚鼠搬家一、題目名稱:新型美麗數列 時間限制:1000ms內存限制:256M 題目描述: 定義美麗數列A: 1. 數列中相鄰的數越是靠內相對大小加一,a[2]=a[1]+1,a[n-2]=a[n-1]+1…

【C語言】小游戲-掃雷(清屏+遞歸展開+標記)

大家好&#xff0c;我是深魚~ 目錄 一、游戲介紹 二、文件分裝 三、代碼實現步驟 1.制作簡易游戲菜單 2. 初始化棋盤(11*11) 3.打印棋盤(9*9) 4.布置雷 5.計算(x,y)周圍8個坐標的和 6.排查雷 <1>清屏后打印棋盤 <2>遞歸展開 <3>標記雷 四、完整代…

視頻監控有哪些存儲方式?安防監控應該如何選擇存儲模式?

視頻監控系統涉及到大量的視頻數據&#xff0c;需要對這些數據進行存儲&#xff0c;以備日后查看或備份。視頻監控的存儲需求需要根據場所的實際情況進行選擇&#xff0c;以保證監控數據的有效存儲和日后的調閱、回溯。 當前視頻監控的存儲方式&#xff0c;通常有以下幾種&…

Golang協程,通道詳解

進程、線程以及并行、并發 關于進程和線程 進程&#xff08;Process&#xff09;就是程序在操作系統中的一次執行過程&#xff0c;是系統進行資源分配和調度的基 本單位&#xff0c;進程是一個動態概念&#xff0c;是程序在執行過程中分配和管理資源的基本單位&#xff0c;每…

【BASH】回顧與知識點梳理(二十三)

【BASH】回顧與知識點梳理 二十三 二十三. Linux 賬號管理&#xff08;二&#xff09;23.1 賬號管理新增與移除使用者&#xff1a; useradd, 相關配置文件, passwd, usermod, userdelusermoduserdel 23.2 用戶功能&#xff08;普通用戶可使用&#xff09;idfingerchfnchsh 23.3…

【數據庫系統】--【2】DBMS架構

DBMS架構 01DBMS架構概述02 DBMS的物理架構03 DBMS的運行和數據架構DBMS的運行架構DBMS的數據架構PostgreSQL的體系結構RMDB的運行架構 04DBMS的邏輯和開發架構DBMS的層次結構DBMS的開發架構DBMS的代碼架構 05小結 01DBMS架構概述 02 DBMS的物理架構 數據庫系統的體系結構 數據…

騰訊Perfdog支持Windows PC端體驗性能測試

一、背景 最近在做抖音的小玩法&#xff0c;其基于unity引擎&#xff0c;然后掛載到直播伴侶。以及Perfdog近期也支持了Windows的測試&#xff0c;所以做一個體驗測試。 二、如何做 查看PC端的支持&#xff0c;目前是beat版本 選擇或搜索自己需要的對應的程序&#xff0c;如…

python實現文本相似度排名計算

項目中&#xff0c;客戶突然提出需要根據一份企業名單查找對應的內部系統用戶信息&#xff0c;然后根據直接的企業社會統一信用號和企業名稱進行匹配&#xff0c;發現匹配率只有2.86%&#xff0c;低得可憐。所以根據客戶的要求&#xff0c;需要將匹配率提高到70-80%左右&#x…

vue2+百度地圖web端開發

在Vue 2中開發百度地圖Web端應用&#xff0c;你可以使用百度地圖JavaScript API來實現地圖功能。以下是一個簡單的示例&#xff1a; 簡單的示例&#xff1a; 首先&#xff0c;在你的Vue項目中安裝vue-baidu-map插件&#xff1a; npm install vue-baidu-map --save在你的Vue組…

大數據Flink(五十九):Flink on Yarn的三種部署方式介紹以及注意

文章目錄 Flink on Yarn的三種部署方式介紹以及注意 一、Pre-Job 模式部署作業

對任意類型數都可以排序的函數:qsort函數

之前我們學習過冒泡排序&#xff1a; int main() {int arr[] { 9,7,8,6,5,4,3,2,1,0 };int sz sizeof(arr)/sizeof(arr[0]);int i 0;for (i 0; i < sz-1; i) {int j 0;for (j 0; j < sz-1-i; j) {if (arr[j] > arr[j 1]){int temp 0;temp arr[j];arr[j] ar…

接口測試及接口抓包常用的測試工具

接口 接口測試是測試系統組件間接口的一種測試。接口測試主要用于檢測外部系統與系統之間以及內部各個子系統之間的交互點。測試的重點是要檢查數據的交換&#xff0c;傳遞和控制管理過程&#xff0c;以及系統間的相互邏輯依賴關系等。 接口測試的重要性 是節省時間前后端不…

七、dokcer-compose部署springboot的jar

1、準備 打包后包名為 ruoyi-admin.jar 增加接口 httpL//{ip}:{port}/common/test/han #環境變量預application.yml 中REDIS_HOSTt的值&#xff0c;去環境變量去找&#xff1b;如果找不到REDIS_HOST就用myredis 1、Dockerfile FROM hlw/java:8-jreRUN ln -sf /usr/share/z…