Kafka 各組件架構簡介

1.Broker

每個 kafka server 稱爲一個 Broker,多個 borker 組成 Kafka Cluster。

一個機器上可以部署一個或者多個 Broker,這多個 Broker 連接到相同的 ZooKeeper 就組成了 Kafka 集羣。

2.Topic

Kafka 是一個發佈訂閱消息系統,它的邏輯結構如下:

Topic 就是消息類別名,一個 topic 中通常放置一類消息。每個 topic 都有一個或者多個訂閱者,也就是消息的消費者 consumer。

Producer 將消息推送到 topic,由訂閱該 topic 的 consumer 從 topic 中拉取消息。

3.Topic 與 Broker

一個 Broker 上可以創建一個或者多個 Topic, 同一個 topic 可以在同一集羣下的多個 Broker 中分佈。

4. Partition log

Kafka 會爲每個 topic 維護了多個分區(partition),每個分區會映射到一個邏輯的日誌(log)文件:

5.Partition distribution

日誌分區是分佈式的存在於一個 kafka 集羣的多個 broker 上。每個 partition 會被複制多份存在於不同的 broker 上。這樣做是爲了容災。具體會複製幾份,會複製到哪些 broker 上,都是可以配置的。經過相關的複製策略後,每個 topic 在每個 broker 上會駐留一到多個 partition。如圖:

對於同一個 partition,它所在任何一個 broker,都有能扮演兩種角色:leader、follower。看上面的例子,紅色的代表是一個 leader。

對於 topic1 的 4 個 partition:

Part 1 的 leader 是 broker1,followers 是 broker2\3。Part2 的 leader 是 broker2,followers 是 broker1\4。Part3 的 leader 是 broker3,followers 是 broker1\3。Part4 的 leader 是 broker4,followers 是 broker2\3。

對於 topic2 的 3 個 partition:

Part1 的 leader 是 broker1,followers 是 broker2。Part2 的 leader 是 broker2,followers 是 broker3。Part3 的 leader 是 broker3,followers 是 broker4。

對於 topic2 的 4 個 partition:

Part 1 的 leader 是 broker4,followers 是 broker1\2\3。Part2 的 leader 是 broker2,followers 是 broker1\3\4。Part3 的 leader 是 broker3,followers 是 broker1\2\4。Part4 的 leader 是 broker1,followers 是 broker2\3\4。

下面是一個真實的例子:

圖中的 partition 0 的 leader 是 broker 2,它有 3 個 replicas:2,1,3。

In-Sync Replica:在同步中,也就是有哪些 broker 正處理同步中。partition 0 的 ISR 是 2,1,3,說明了 3 個 replica 都是正常狀態。如果有一個 broker down,那麼它就不會在 ISR 中出現。

之後把 broker1 停止後:

每個 partition 的 Leader 的用於處理到該 partition 的讀寫請求的,每個 partition 的 followers 是用於異步的從它的 leader 中複製數據的。

Kafka 會動態維護一個與 Leader 保持一致的同步副本(in-sync replicas (ISR))集合,並且會將最新的同步副本(ISR )集合持久化到 zookeeper。如果 leader 出現問題了,就會從該 partition 的 followers 中選舉一個作爲新的 leader。

所以呢,在一個 kafka 集羣中,每個 broker 通常會扮演兩個角色:在一個 partition 中扮演 leader,在其它的 partition 中扮演 followers。Leader 是最繁忙的,要處理讀寫請求。這樣將 leader 均分到不同的 broker 上,目的自然是要確保負載均衡。

6.Producer

Producer 作爲消息的生產者,在生產完消息後需要將消息投送到指定的目的地(某個 topic 的某個 partition),Producer 可以根據指定選擇 partition 的算法或者是隨機方式來選擇發佈消息到哪個 partition。

7.Consumer

架構圖

對上述各組件介紹後,現在就應該可以很容易的理解 Kafka 的架構圖:

在 0.8 版本之後,consumer 不會再與 zookeeper 直接通信了,所以該架構圖也應該有所調整了:

作者:Natasha_

來源:juejin.cn/post/6890398563004579854

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/bkeZjcFGc47g2lXVD0TnSw