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

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 的互聯網架構」系列文章作者,專註於互聯網架構技術。

👇閱讀「mikechen 的互聯網架構」40W 字技術文章合集👇

Java 並發 | JVM | MySQL | Spring | Redis | 分散式 | 高並發

— end —