kafka架構詳解

文章目錄

    • 概述
    • kafaka架構
    • Kafka的設計時什么樣的
    • Zookeeper 在 Kafka 中的作用知道

概述

Apache Kafka 是分布式發布 - 訂閱消息系統,在 kafka 官網上對 kafka 的定義:一個分布式發布 - 訂閱消息傳遞系統。
Kafka 最初由 LinkedIn 公司開發,Linkedin 于 2010 年貢獻給了 Apache 基金會并成為頂級開源項目。Kafka 的主要應用場景有:日志收集系統和消息系統。

kafaka架構

kafaka架構比較簡單,是顯式分布式架構,主要由producer(生產者),broker(kafka集群)和 er(生產者)consumer(消費者)組成。
在這里插入圖片描述

在這里插入圖片描述

整個架構中包括三個角色。
生產者(Producer):消息和數據生產者。
代理(Broker):緩存代理,Kafka 的核心功能。
消費者(Consumer):消息和數據消費者。
Kafka 給 Producer 和 Consumer 提供注冊的接口,數據從 Producer 發送到 Broker,
Broker 承擔一個中間緩存和分發的作用,負責分發注冊到系統中的 Consumer。
Producer :消息生產者,就是向 kafka broker 發消息的客戶端。
Consumer :消息消費者,向 kafka broker 取消息的客戶端。
Topic :可以理解為一個隊列,一個 Topic 又分為一個或多個分區,
Consumer Group:這是 kafka 用來實現一個 topic 消息的廣播(發給所有的 consumer)和單播(發給任意一個 consumer)的手段。一個 topic 可以有多個 Consumer Group。
Broker :一臺 kafka 服務器就是一個 broker。一個集群由多個 broker 組成。一個broker 可以容納多個 topic。
Partition:為了實現擴展性,一個非常大的 topic 可以分布到多個 broker上,每個 partition 是一個有序的隊列。partition 中的每條消息都會被分配一個有序的id(offset)。將消息發給 consumer,kafka 只保證按一個 partition 中的消息的順序,不保證一個 topic 的整體(多個 partition 間)的順序。
Offset:kafka 的存儲文件都是按照 offset.kafka 來命名,用 offset 做名字的好處是方便查找。例如你想找位于 2049 的位置,只要找到 2048.kafka 的文件即可。當然 the first offset 就是 00000000000.kafka。

Kafka的設計時什么樣的

Kafka將消息以topic為單位進行歸納
將向Kafka topic發布消息的程序成為producers.
將預訂topics并消費消息的程序成為consumer.
Kafka以集群的方式運行,可以由一個或多個服務組成,每個服務叫做一個broker.
producers通過網絡將消息發送到Kafka集群,集群向消費者提供消息

Kafka 將消息以 topic 為單位進行歸納
將向 Kafka topic 發布消息的程序成為 producers.
將預訂 topics 并消費消息的程序成為 consumer.
Kafka 以集群的方式運行,可以由一個或多個服務組成,每個服務叫做一個 broker
producers 通過網絡將消息發送到 Kafka 集群,集群向消費者提供消息
1.消息分類按不同類別,分成不同的Topic,Topic?拆分成多個partition,每個partition均衡分散到不同的服務器(提?并發訪問的能?)
2.消費者按順序從partition中讀取,不?持隨機讀取數據,但可通過改變保存到zookeeper中的offset位置實現從任意位置開始讀取
3.服務器消息定時清除(不管有沒有消費)
4.每個partition還可以設置備份到其他服務器上的個數以保證數據的可?性。通過Leader,Follower?式
5.zookeeper保存kafka服務器和客戶端的所有狀態信息.(確保實際的客戶端和服務器輕量級)
6.在kafka中,?個partition中的消息只會被group中的?個consumer消費;每個group中consumer消息消費互相獨?;我們可以認為?個group是?個"訂閱"者,?個Topic中的每個partions,只會被?個"訂閱者"中的?個consumer消費,不過?個consumer可以消費多個partitions中的消息
7.如果所有的consumer都具有相同的group,這種情況和queue模式很像;消息將會在consumers之間負載均衡.
8.如果所有的consumer都具有不同的group,那這就是"發布-訂閱";消息將會?播給所有的消費者
9.持久性,當收到的消息時先buffer起來,等到了?定的閥值再寫?磁盤?件,減少磁盤IO.在?定程度上依賴OS的?件系統(對?件系統本身優化幾乎不可能)
10.除了磁盤IO,還應考慮?絡IO,批量對消息發送和接收,并對消息進行壓縮。
11.在JMS實現中,Topic模型基于push?式,即broker將消息推送給consumer端.不過在kafka中,采用了pull?式,即consumer在和broker建?連接之后,主動去pull(或者說fetch)消息;這種模式有些優點,?先consumer端可以根據自己的消費能力適時的去fetch消息并處理,且可以控制消息消費的進度(offset);此外,消費者可以良好的控制消息消費的數量,batch fetch.
12.kafka無需記錄消息是否接收成功,是否要重新發送等,所以kafka的producer是?常輕量級的,consumer端也只需要將fetch后的offset位置注冊到zookeeper,所以也是?常輕量級的.

Zookeeper 在 Kafka 中的作用知道

Apache Kafka 的一個關鍵依賴是 Apache Zookeeper,它是一個分布式配置和同步服務。Zookeeper 是 Kafka 代理和消費者之間的協調接口。Kafka 服務器通過 Zookeeper 集群共享信息。Kafka 在 Zookeeper 中存儲基本元數據,例如關于主題,代理,消費者偏移(隊列讀取器)等的信息。
由于所有關鍵信息存儲在 Zookeeper 中,并且它通常在其整體上復制此數據,因此Kafka代理/ Zookeeper 的故障不會影響 Kafka 集群的狀態。Kafka 將恢復狀態,一旦 Zookeeper 重新啟動。 這為Kafka帶來了零停機時間。Kafka 代理之間的領導者選舉也通過使用 Zookeeper 在領導者失敗的情況下完成。

kafka 不能脫離 zookeeper 單獨使用,因為 kafka 使用 zookeeper 管理和協調 kafka 的節點服務器。
Broker 注冊 :在 Zookeeper 上會有一個專門用來進行 Broker 服務器列表記錄的節點。
每個 Broker 在啟動時,都會到 Zookeeper 上進行注冊,即到 /brokers/ids 下創建屬于
自己的節點。每個 Broker 就會將自己的 IP 地址和端口等信息記錄到該節點中去
Topic 注冊 : 在 Kafka 中,同一個 Topic 的消息會被分成多個分區并將其分布在多個
Broker 上,這些分區信息及與 Broker 的對應關系也都是由 Zookeeper 在維護。比如我
創建了一個名字為 my-topic 的主題并且它有兩個分區,對應到 zookeeper 中會創建這
些文件夾:/brokers/topics/my-topic/Partitions/0、/brokers/topics/my
topic/Partitions/1
負載均衡 :上面也說過了 Kafka 通過給特定 Topic 指定多個 Partition, 而各個 Partition
可以分布在不同的 Broker 上, 這樣便能提供比較好的并發能力。 對于同一個 Topic 的不
同 Partition,Kafka 會盡力將這些 Partition 分布到不同的 Broker 服務器上。當生產者
產生消息后也會盡量投遞到不同 Broker 的 Partition 里面。當 Consumer 消費的時候,
Zookeeper 可以根據當前的 Partition 數量以及 Consumer 數量來實現動態負載均衡

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

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

相關文章

mysql 中 auto_increment 自增約束的用法和配置

自增約束 int字段 特殊約束條件,用于為表中寫入新的記錄生成唯一的值,一個表中只能有一個自增約束字段 格式 字段 數據類型 auto_increment 創建帶有自增約束的表 create table student_game_auto ( id int unique auto_increment, name char(5),…

螞蟻集團推動編制的全球首個隱私計算一體機國際標準發布

近日,IEEE 標準協會(IEEE-SA)正式發布并推行了由我國企業主導的全球首個隱私計算一體機國際標準《隱私計算一體機技術要求》(IEEE 3156-2023)。IEEE-SA是權威國際標準制定機構,該標準的成功發布意味著中國的…

numpy常見操作

返回各維度元組print(img.shape)返回大小img.size返回各維度數據類型print(img.dtype) 數據類型變int8maskmask.astype(np.int8) 注意int32可變float64 但float64變int32會把小數截斷 string_可變float64 NumPy常見操作: import numpy as np 創建一個一維數組 ar…

繼承-學習2

this關鍵字:指向調用該方法的對象,一般我們是在當前類中使用this關鍵字,所以我們常說代表本類對象的引用 super關鍵字:代表父類存儲空間的標識(可看作父類對象的引用) 父類: package ven;public class Fu {//父類成員…

操作系統面經

1. 進程和線程的區別? 調度:進程是資源管理的基本單位,線程是程序執行的基本單位。切換:線程上下文切換比進程上下文切換要快得多。擁有資源: 進程是擁有資源的一個獨立單位,線程不擁有系統資源&#xff0…

unity自定義著色器基礎

這些內置渲染管線的著色器示例演示了編寫自定義著色器的基礎知識,并涵蓋了常見的用例。 有關編寫著色器的信息,請參閱編寫著色器。 設置場景 第一步是創建一些用于測試著色器的對象。在主菜單中選擇 Game Object > 3D Object > Capsule。然后&a…

高光譜遙感學習入門丨高光譜數據處理基礎、Python和Matlab高光譜遙感數據處理

目錄 ①Python高光譜遙感數據處理與高光譜遙感機器學習方法深度應用 ②Matlab高光譜遙感、數據處理與混合像元分解實踐技術應用 ③高光譜遙感數值建模技術及在植被、水體、土壤信息提取領域應用 更多應用 高光譜遙感信息對于我們認識世界具有重要意義。盡管大部分物質在人眼…

記錄 | docker權限原因導致service ssh start失敗

【報錯】 容器內啟 ssh server 報錯 有兩個錯: (1)/etc/ssh/sshd_host_rsa_key 權限太高; (2)/run/sshd用戶組不為 root 解決方法: 方法一: 各自容器內對/etc/ssh/sshd_host_r…

【前端素材】推薦優質后臺管理系統 Adminity平臺模板(附源碼)

一、需求分析 1、系統定義 后臺管理系統是一種用于管理網站、應用程序或系統的管理界面,通常由管理員和工作人員使用。它提供了訪問和控制網站或應用程序后臺功能的工具和界面,使其能夠管理用戶、內容、數據和其他各種功能。 2、功能需求 后臺管理系…

2024年四川媒體新聞發布渠道,媒體邀約資源表

傳媒如春雨,潤物細無聲,大家好,我是51媒體網胡老師。 四川有哪些媒體新聞發布渠道,媒體邀約資源表? 2024年四川媒體新聞發布渠道,媒體邀約資源表 四川本地媒體:如四川日報、華西都市報、成都商…

【論文閱讀-PRIVGUARD】Day4:3節

3 PRIVANALYZER:強制執行隱私政策的靜態分析 本節介紹PRIVANALYZER,這是一個用于強制執行由PRIVGUARD追蹤的隱私政策的靜態分析器**。我們首先回顧LEGALEASE政策語言,我們使用它來正式編碼政策,然后描述如何靜態地強制執行它們**…

<專利>機器人3D視覺快速定位抓取方法及系統

摘要,此專利無可用的關鍵技術信息,基本都是下面幾句話反復說。。。 本發明提供了一種機器人3D快速定位抓取方法及系統, 包括: 通過高速的3D結構光成像對目標物體的表面輪廓進行掃描, 形成點云數據;對所述點…

Day07:基礎入門-抓包技術全局協議封包監聽網卡模式APP小程序PC應用

目錄 非HTTP/HTTPS協議抓包工具 WireShark 科來網絡分析系統 WPE封包 思維導圖 章節知識點: 應用架構:Web/APP/云應用/三方服務/負載均衡等 安全產品:CDN/WAF/IDS/IPS/蜜罐/防火墻/殺毒等 滲透命令:文件上傳下載/端口服務/Sh…

未來已來:智慧餐飲點餐系統引領餐飲業的數字化轉型

時下,智慧餐飲點餐系統正在引領著餐飲業邁向更高的位置。今天,小編將與大家共同探討智慧餐飲點餐系統的發展趨勢、優勢以及對餐飲業的影響。 一、智慧餐飲點餐系統的發展趨勢 智慧餐飲點餐系統的出現填補了這一空白,它通過引入數字化技術&a…

如何學習、上手點云算法(一):點云基礎

寫在前面 本文內容 點云算法的學習基礎,入門方法,相關領域,資源,開源庫,算法等的介紹; 以Open3D和PCL等為基礎工具的點云處理代碼講解、實現; 文中涉及的參考以鏈接形式給出,涉及文…

【JavaEE】_第一個SpringBoot項目

目錄 1. 第一個SpringBoot項目 1.1 創建項目 1.2 加載依賴 1.3 運行啟動類 1.4 創建一個簡單類試運行 2. 關于SpringBoot項目的目錄結構 3. 關于修改文件名 4. 關于啟動日志 5. 關于訪問出錯 5.1 404 5.1.2 URL輸入錯誤 5.1.2 注解錯誤 5.2 500 5.3 無法訪問此網…

JDK動態代理如何獲取動態生成的代理類的class文件

在使用JDK動態代理,即reflect包下的Proxy類的newProxyInstance方法時,會在運行時,根據傳進來的接口類型動態生成class字節碼文件。這個字節碼文件是在內存中動態獲取的,程序結束就沒有了,如何動態獲取呢。 System.set…

LeetCode 2265.統計值等于子樹平均值的節點數

給你一棵二叉樹的根節點 root ,找出并返回滿足要求的節點數,要求節點的值等于其 子樹 中值的 平均值 。 注意: n 個元素的平均值可以由 n 個元素 求和 然后再除以 n ,并 向下舍入 到最近的整數。 root 的 子樹 由 root 和它的所…

海外代理IP干貨:應該選擇SOCKS55代理還是Http代理?

在使用IPFoxy全球代理時,選擇 SOCKS55代理還是HTTP代理?IPFoxy代理可以SOCKS55、Http協議自主切換,但要怎么選擇?為解決這個問題,得充分了解兩種代理的工作原理和配置情況。 在這篇文章中,我們會簡要介紹 …

【雙指針+中心擴散】5. 最長回文子串

5. 最長回文子串 解題思路 初始化:定義一個空字符串res來存儲當前找到的最長回文子串。 遍歷字符串:對于字符串s中的每個位置i,將其作為中心,進行兩次回文檢查: 將s[i]作為單個中心進行檢查。 將s[i]和s[i1]作為共…