Kafka 架構和原理機制 (圖文全面詳解)

2022-11-01 12:01:38

Kafka的原理、基礎架構、以及使用場景-mikechen的網際網路架構

目錄

一:Kafka 簡介

Apache Kafka 是分散式釋出 - 訂閱訊息系統,在 kafka 官網上對 kafka 的定義:一個分散式釋出 - 訂閱訊息傳遞系統。

Kafka 最初由 LinkedIn 公司開發,Linkedin 於 2010 年貢獻給了 Apache 基金會併成為頂級開源專案。

Kafka 的主要應用場景有:紀錄檔收集系統和訊息系統。

Kafka的原理、基礎架構、以及使用場景-mikechen的網際網路架構

二:Kafka 基本架構

Kafka 的架構包括以下元件:

Kafka的原理、基礎架構、以及使用場景-mikechen的網際網路架構

1、話題(Topic):是特定型別的訊息流。訊息是位元組的有效負載(Payload),話題是訊息的分類名;

2、生產者(Producer):是能夠釋出訊息到話題的任何物件;

3、服務代理(Broker):已釋出的訊息儲存在一組伺服器中,它們被稱為代理(Broker)或 Kafka 叢集;

4、消費者(Consumer):可以訂閱一個或多個話題,並從 Broker 拉資料,從而消費這些已釋出的訊息;

上圖中可以看出,生產者將資料傳送到 Broker 代理,Broker 代理有多個話題 topic ,消費者從 Broker 獲取資料。

三:Kafka 基本原理

我們將訊息的釋出(publish)稱作 producer,將訊息的訂閱(subscribe)表述為 consumer,將中間的儲存陣列稱作 broker (代理),這樣就可以大致描繪出這樣一個場面:

Kafka的原理、基礎架構、以及使用場景-mikechen的網際網路架構

生產者將資料生產出來,交給 broker 進行儲存,消費者需要消費資料了,就從 broker 中去拿出資料來,然後完成一系列對資料的處理操作。

Kafka的原理、基礎架構、以及使用場景-mikechen的網際網路架構

多個 broker 協同合作,producer 和 consumer 部署在各個業務邏輯中被頻繁的呼叫,三者通過 zookeeper 管理協調請求和轉發,這樣一個高效能的分散式訊息釋出訂閱系統就完成了。

圖上有個細節需要注意,producer 到 broker 的過程是 push,也就是有資料就推播到 broker,而 consumer 到 broker 的過程是 pull,是通過 consumer 主動去拉資料的。

四:Zookeeper 在 Kafka 的作用

Kafka的原理、基礎架構、以及使用場景-mikechen的網際網路架構

1.  無論是 Kafka 叢集,還是 producer 和 consumer ,都依賴於 Zookeeper 來保證系統可用性叢集儲存一些 meta 資訊。

2.  Kafka 使用 Zookeeper 作為其分散式協調框架,可以很好地將訊息生產、訊息儲存、訊息消費的過程結合在一起。

3.  Kafka 藉助 Zookeeper,讓生產者、消費者和 broker 在內的所有元件,在無狀態的情況下,建立起生產者和消費者的訂閱關係,並實現生產者與消費者的負載均衡。

五:Kafka 的特性

1. 高吞吐量、低延遲

Kafka 每秒可以處理幾十萬條訊息,它的延遲最低只有幾毫秒,每個 topic 可以分多個 partition ,  consumer group 對 partition 進行 consume 操作。

2. 可延伸性

Kafka 叢集支援熱擴充套件。

3.  永續性、可靠性

訊息被持久化到本地磁碟,並且支援資料備份防止資料丟失。

4.  容錯性

允許叢集中節點失敗(若副本數量為 n, 則允許 n-1 個節點失敗)

5.  高並行

支援數千個使用者端同時讀寫。

六:Kafka 的應用場景

Kafka的原理、基礎架構、以及使用場景-mikechen的網際網路架構

1.  紀錄檔收集

一個公司可以用 Kafka 收集各種服務的 log ,通過 Kafka 以統一介面服務的方式開放給各種 consumer,例如:hadoop、Hbase、Solr 等。

2.  訊息系統

解耦和生產者和消費者、快取訊息等。

3. 使用者活動跟蹤

Kafka 經常被用來記錄 web 使用者、或者 app 使用者的各種活動,例如:瀏覽網頁、搜尋、點選等活動。

這些活動資訊,被各個伺服器釋出到 Kafka 的 topic 中,訂閱者再通過訂閱這些 topic 來做實時的監控分析,或者裝載到 hadoop 、資料倉儲中做離線分析和挖掘。

4.  運營指標

Kafka 也經常用來記錄運營監控資料。

包括收集各種分散式應用的資料,生產各種操作的集中反饋等,例如:報警和報告。

5. 流式處理

例如:spark streaming、storm 。

以上!

作者簡介

陳睿 | mikechen , 10 年 + 大廠架構經驗,「mikechen 的網際網路架構」系列文章作者,專注於網際網路架構技術。