28 張圖帶你體系化全面認(rèn)識(shí) Kafka
Kafka 是主流的消息流系統(tǒng),其中的概念還是比較多的,下面通過(guò)圖示的方式來(lái)梳理一下 Kafka 的核心概念,以便在我們的頭腦中有一個(gè)清晰的認(rèn)識(shí)。
01
基礎(chǔ)


02
生產(chǎn)者消費(fèi)者

一個(gè)服務(wù)可以同時(shí)為生產(chǎn)者和消費(fèi)者。

03
Topics 主題
Topic 是生產(chǎn)者發(fā)送消息的目標(biāo)地址,是消費(fèi)者的監(jiān)聽(tīng)目標(biāo)。

一個(gè)服務(wù)可以監(jiān)聽(tīng)、發(fā)送多個(gè) Topics。

Kafka 中有一個(gè)【consumer-group(消費(fèi)者組)】的概念。
這是一組服務(wù),扮演一個(gè)消費(fèi)者。

如果是消費(fèi)者組接收消息,Kafka 會(huì)把一條消息路由到組中的某一個(gè)服務(wù)。

這樣有助于消息的負(fù)載均衡,也方便擴(kuò)展消費(fèi)者。


接下來(lái),消息會(huì)被發(fā)送給此 Topic 的消費(fèi)者。




04
Partitions 分區(qū)
上面 Topic 的描述中,把 Topic 看做了一個(gè)隊(duì)列,實(shí)際上,一個(gè) Topic 是由多個(gè)隊(duì)列組成的,被稱為【Partition(分區(qū))】。




也可以配置 Topic,讓同類型的消息都在同一個(gè) Partition。
例如,處理用戶消息,可以讓某一個(gè)用戶所有消息都在一個(gè) Partition。
例如,用戶 1 發(fā)送了 3 條消息:A、B、C,默認(rèn)情況下,這 3 條消息是在不同的 Partition 中(如 P1、P2、P3)。

這個(gè)功能有什么用呢?這是為了提供消息的【有序性】。


05
架構(gòu)

ZooKeeper 管理著所有的 Topic 和 Partition。

例如,有 2 個(gè) Topic,各自有 2 個(gè) Partition。


Topic A 的 Partition #1 有 3 份,分布在各個(gè) Node 上。
這樣可以增加 Kafka 的可靠性和系統(tǒng)彈性。


這樣,每個(gè) Partition 都含有了全量消息數(shù)據(jù)。

即使某個(gè) Node 節(jié)點(diǎn)出現(xiàn)了故障,也不用擔(dān)心消息的損壞。

感謝閱讀,希望對(duì)你有所幫助!
