消息隊列 Kafka 架構組件及其特性

Kafka

人們通常有時會將 Kafka 中的 Topic 比作隊列;
?

在 Kafka 中,數據是以主題(Topic)的形式組織的,每個 Topic 可以被分為多個分區(Partition)。每個 Partition 是一個有序的、不可變的消息序列,這與隊列的概念有些相似。

組件

一、Producer(生產者)

Kafka 為了提升消息發送速率,生產者默認采用批量發送的方式發送消息至 Broker;
?

一條發送多少條由參數 batch.size 決定(默認16K);
?

產生消息并將其發送給消息代理的應用程序或服務。生產者創建消息并將它們放入特定的消息隊列主題中。生產者是創建并發送消息的實體。它可以是一個應用程序、服務或進程

二、Broker(服務器)

Broker 就是 kafka 的服務器,用于存儲和管理消息,默認端口是9092;
?

生產者和 Broker 建立連接,將消息發送到服務器上存儲起來;
?

消費者跟 Broke r建立連接,訂閱和消費服務器上存儲的消息;
?

消息處理中心。消息隊列系統的核心組件,負責接收、存儲和轉發消息。消息代理充當生產者和消費者之間的中介,確保消息能夠從一個地方安全的傳輸到另一個地方。

三、Consumer(消費者)

訂閱,接收消息的一方叫消費者;
?

消費者獲取消息有兩種模式:Pull模式(拉)(消費者主動從消息隊列中獲取消息);Push模式(推)(Broker 把消息推送給消費者);
?

Kafka 采用的是 Pull 模式,因為 Kafka 是支持大數據的,如果采用 Push 模式的話,海量數據可能把下游消費端給打爆,所以 Kafka 采用 Pull 模式推送消息;
?

Pull 模式,消費者可以控制一次到底獲取多少條消息(max.pull.records 默認是500)。

四、Record(消息)

客服端傳輸的數據叫做消息,在 Kafka 中也叫 Record;
?

Record 在客戶端是一個 KV 鍵值對(ProducerRecord,ConsumerRecord);
?

Record 在服務端是一個 KV 鍵值對(RecordBatch(批量發送)或 Record)。
?

實際的數據單位,可以是任何類型的信息,如文本、圖片等。

Topic(主題)

Topic 一個邏輯概念,可以理解為一組消息的集合;
?

生產者和消費者通過 topic 進行消息的寫入和讀取;
?

生產者發送消息時,若 topic 不存在,是否自動創建:auto.create.topics.enable(建議關閉);
?

某些消息隊列系統支持 發布/訂閱 模型,在這種情況下,消息會被發送到一個主題而不是直接到隊列。多個消費者可以訂閱同一個主題以接收該主題下的所有消息。

Partition(分區)

就是把一個topic分成幾個不同的部分;
?

一個topic在創建時可以劃分多個分區,若沒有指定,默認分區數為1,可通過參數修改(num.partitions);
?

Kafka 中修改分區規則:可加,不可減。

Replica(副本機制)

和分區結合起來是Kafka實現高可用和負載均衡的原理
?

Replica(副本)是 Partition(分區)的副本,每個分區可以有若干個副本(但是不能超過集群數量);
?

副本必須在不同的Broker上,副本包括了主從節點(Leader,Foller);
?

服務端可以通過參數控制默認副本數(offsets.topic.replication.factor)(一般不這樣用,一般直接通過命令設置副本數);
?

生產者只會往 leader 節點發送消息,消費者也只會從 leader 節點讀取消息。

Segment(段)

Kafka 的數據文件是寫在 .log 文件里面的,另外一起還生成對應的索引 .index 文件和對應的時間 .timeIndex 文件;

但是很容易的可以理解,如果一直往一個log文件里面追加數據,那么長時間使用之后log文件的查找會隨著數據量變大而變慢,所以在這種情況下就引入了 Segment段 的概念;

Segment 的目的是:建一個分區的數據劃分、存儲到不同的文件中;

每個 Segment 至少由一個數據文件和2個索引文件構成,3個文件是成套出現的;

引入段的意義:加快查詢效率、刪除數據時減少逐條IO;

Segement 大小控制:按時間周期生成 log.roll.hours(默認一周)、按文件大小生產 log.segment.bytes(默認1G)。

Consumer Group(消費者組)

由于生產者可能短時間內生產大量消息,為了提升消息的消費速率,就增加了消費者組的概念(group id);
?

使用消費者組,提升消費效率和吞吐量;
?

同一個 Group 中的消費者,不能消費相同的分區(group id 相同,在一個組內)。

負載均衡:
? ? ? ? 在同一個消費者組內的消費者會自動分配主題中的分區。如果消費者的數量小于或等于主題的分區數,那么每個消費者將被分配到一個或多個分區;如果消費者的數量超過了分區的數量,那么多余的消費者將處于空閑狀態,不會接受任何消息

高可用性和容錯性:

? ? ? ? 如果某個消費者失敗了或者停止運行,它的分區會被重新分配給組內的其它活躍消費者,確保消息繼續被處理,這被稱為再平衡(再平衡機制保證了即使有消費者假如或離開,整個組仍然能夠持續穩定的消費消息)

并行處理:

? ? ? ? 通過增加同一消費者組中的消費者數量,可以提高對消息的并行處理能力。但是,最大并行度受限于主題的分區數,因為每個分區只能由一個消費者消費


消費進度跟蹤:

? ? ? ? 每個消費者組維護自己的消費偏移量(Offset),記錄已經消費過的消息位置。kafka默認會定期提交這些偏移量,以確保在消費者重啟后可以從上次的位置繼續消費


獨立消費流:

? ? ? ? 不同的消費者組可以獨立的消費相同主題的消息,而不會相互影響。這意味著一個主題的消息可以被多個不同的應用或服務同時消費。

Consumer Offset(偏移量)(Kafka,單分區消息順序消費的原因)

Kafka 在單分區里面的消息是順序存儲的;
?

Offset(偏移量)的目的在于:記錄消費者的消費位置;
?

Kafka 現行版本將 Offset 保存在服務器(__consumer_offsets_)主題中(0.9版本以前是在zooKeeper中)

隊列:存儲消息的地方,直到它們被消費者獲取(在某些情況下,隊列可以設置為持久化,以確保即使在系統故障后消息也不會丟失)

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

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

相關文章

《Mycat核心技術》第06章:Mycat問題處理總結

作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章匯總:https://binghe.gitcode.host/md/all/all.html 星球項目地址:https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀&#xff0c…

【day11】面向對象編程進階(繼承)

概述 本文深入探討面向對象編程的核心概念,包括繼承、方法重寫、this和super關鍵字的使用,以及抽象類和方法的定義與實現。通過本文的學習,你將能夠: 理解繼承的優勢。掌握繼承的使用方法。了解繼承后成員變量和成員方法的訪問特…

隨手記:小程序兼容后臺的wangEditor富文本配置鏈接

場景&#xff1a; 在后臺配置wangEditor富文本&#xff0c;可以文字配置鏈接&#xff0c;圖片配置鏈接&#xff0c;產生的json格式為&#xff1a; 例子&#xff1a; <h1><a href"https://uniapp.dcloud.net.cn/" target"_blank"><span sty…

6.8 Newman自動化運行Postman測試集

歡迎大家訂閱【軟件測試】 專欄&#xff0c;開啟你的軟件測試學習之旅&#xff01; 文章目錄 1 安裝Node.js2 安裝Newman3 使用Newman運行Postman測試集3.1 導出Postman集合3.2 使用Newman運行集合3.3 Newman常用參數3.4 Newman報告格式 4 使用定時任務自動化執行腳本4.1 編寫B…

工具環境 | 工具準備

搭建一套驗證環境需要的工具如下&#xff1a; 虛擬機&#xff1a;推薦virtualbox ubuntu VM好用&#xff0c;但是免費的好像木有了&#xff0c;ubuntu界面版更加容易上手。 網上找安裝教程即可&#xff0c;注意實現文件共享、復制粘貼等功能。 EDA&#xff1a;VCS Veridi 工…

計算機網絡之王道考研讀書筆記-2

第 2 章 物理層 2.1 通信基礎 2.1.1 基本概念 1.數據、信號與碼元 通信的目的是傳輸信息。數據是指傳送信息的實體。信號則是數據的電氣或電磁表現&#xff0c;是數據在傳輸過程中的存在形式。碼元是數字通信中數字信號的計量單位&#xff0c;這個時長內的信號稱為 k 進制碼…

ROS2學習配套C++知識

第3章 訂閱和發布——話題通信探索 3.3.1 發布速度控制海龜畫圓 std::bind cstd::bind綁定成員函數時&#xff0c;需要加上作用域以及取址符號 因為不會將成員函數隱式的轉換成指針&#xff0c;因此需要加&符號&#xff1b; 后面的第一個參數必須跟具體對象&#xff0c;c…

法規標準-C-NCAP評測標準解析(2024版)

文章目錄 什么是C-NCAP&#xff1f;C-NCAP 評測標準C-NCAP評測維度三大維度的評測場景及對應分數評星標準 自動駕駛相關評測場景評測方法及評測標準AEB VRU——評測內容(測什么&#xff1f;)AEB VRU——評測方法(怎么測&#xff1f;)車輛直行與前方縱向行走的行人測試場景&…

第十七屆山東省職業院校技能大賽 中職組“網絡安全”賽項任務書正式賽題

第十七屆山東省職業院校技能大賽 中職組“網絡安全”賽項任務書-A 目錄 一、競賽階段 二、競賽任務書內容 &#xff08;一&#xff09;拓撲圖 &#xff08;二&#xff09;模塊A 基礎設施設置與安全加固(200分) &#xff08;三&#xff09;B模塊安全事件響應/網絡安全數據取證/…

mlr3機器學習AUC的置信區間提取

如果你在mlr3拿到機器學習的預測數據 ROC 過程原理探索 假設數據 df <- data.frame(Airis$Sepal.Length, groupsample(x c(0,1),size 150,replace T)) 分組為 0,1 # 變量A為連續性變量 library(pROC) roc_obj <- roc(df g r o u p , d f group, df group,dfA, le…

Halcon例程代碼解讀:安全環檢測(附源碼|圖像下載鏈接)

安全環檢測核心思路與代碼詳解 項目目標 本項目的目標是檢測圖像中的安全環位置和方向。通過形狀匹配技術&#xff0c;從一張模型圖像中提取安全環的特征&#xff0c;并在后續圖像中識別多個實例&#xff0c;完成檢測和方向標定。 實現思路 安全環檢測分為以下核心步驟&…

Java——多線程進階知識

目錄 一、常見的鎖策略 樂觀鎖VS悲觀鎖 讀寫鎖 重量級鎖VS輕量級鎖 總結&#xff1a; 自旋鎖&#xff08;Spin Lock&#xff09; 公平鎖VS非公平鎖 可重入鎖VS不可重入鎖 二、CAS 何為CAS CAS有哪些應用 1&#xff09;實現原子類 2&#xff09;實現自旋鎖 CAS的ABA…

ubuntu18.04升級到ubuntu20.04

為了使用qt6&#xff0c;在ubuntu18.04上各種折騰失敗&#xff0c;無奈只能升級到ubuntu20.04, 按照網上的教程沒成功。自己摸索了 lsb_release -a df -h sudo apt update sudo apt upgrade -y sudo apt dist-upgrade -y sudo apt autoremove -y sudo apt clean sudo apt inst…

【Blender】【源碼詳解】BLI_mesh_boolean 實現詳解

1. 背景&#xff1a; 最近因為項目需要&#xff0c;需要閱讀 Blender 中關于 mesh boolean 的源碼&#xff1b;因此&#xff0c;對 blender 中的 mesh boolean 源碼進行解讀&#xff1b; Github 上源碼下載很慢&#xff0c;一般使用 Gitee: gitee Blender 源碼 2. Mesh Boole…

qcow2鏡像大小壓縮

本文擬對qcow2進行壓縮進行簡單介紹 背景 qcow2鏡像在使用一段時間后&#xff0c;總是會不斷膨脹變大&#xff0c;所以在導出分享時一般都需要進行壓縮以縮減占用空間。 清除空洞 qcow2方式也有稀疏的問題&#xff0c;在磁盤級別上看&#xff0c;鏡像會有大量連續的相同空洞…

達夢 本地編碼:PG_GBK, 導入文件編碼:PG_UTF8錯誤

問題 達夢 本地編碼&#xff1a;PG_GBK, 導入文件編碼&#xff1a;PG_UTF8錯誤 解決 右鍵管理服務器 查看配置 新建一個數據庫實例&#xff0c;配置跟之前的保持一致 新建一個用戶&#xff0c;跟以前的用戶名一樣 在用戶上&#xff0c;右鍵導入&#xff0c;選擇dmp的位置 導…

深度學習卷積神經網絡CNN之MobileNet模型網絡模型詳解說明(超詳細理論篇)

1.MobileNet背景 2.MobileNet V1論文 3. MobileNett改進史 4. MobileNet模型結構 5. 特點&#xff08;超詳細創新、優缺點及新知識點&#xff09; 一、MobileNet背景 隨著移動設備的普及&#xff0c;深度學習模型的應用場景逐漸擴展至移動端和嵌入式設備。然而&#xff0c;傳統…

垂起固定翼無人機大面積森林草原巡檢技術詳解

垂起固定翼無人機大面積森林草原巡檢技術是一種高效、精準的監測手段&#xff0c;以下是對該技術的詳細解析&#xff1a; 一、垂起固定翼無人機技術特點 垂起固定翼無人機結合了多旋翼和固定翼無人機的優點&#xff0c;具備垂直起降、飛行距離長、速度快、高度高等特點。這種無…

kubernates實戰

使用k8s來部署tomcat 1、創建一個部署&#xff0c;并指定鏡像地址 kubectl create deployment tomcat6 --imagetomcat:6.0.53-jre82、查看部署pod狀態 kubectl get pods # 獲取default名稱空間下的pods kubectl get pods --all-namespaces # 獲取所有名稱空間下的pods kubect…

數據挖掘之認識數據

在數據挖掘過程中&#xff0c;數據的認識是非常重要的一步&#xff0c;它為后續的數據分析、建模、特征選擇等工作奠定基礎。以鳶尾花數據集&#xff08;Iris Dataset&#xff09;數據集之鳶尾花數據集&#xff08;Iris Dataset&#xff09;-CSDN博客為例&#xff0c;下面將介紹…