掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
作者:佚名 2021-05-13 07:30:27
開發(fā)
架構(gòu)
開發(fā)工具
Kafka Kafka 是主流的消息流系統(tǒng),其中的概念還是比較多的,下面通過圖示的方式來梳理一下 Kafka 的核心概念,以便在我們的頭腦中有一個清晰的認(rèn)識。

“只有客戶發(fā)展了,才有我們的生存與發(fā)展!”這是成都創(chuàng)新互聯(lián)公司的服務(wù)宗旨!把網(wǎng)站當(dāng)作互聯(lián)網(wǎng)產(chǎn)品,產(chǎn)品思維更注重全局思維、需求分析和迭代思維,在網(wǎng)站建設(shè)中就是為了建設(shè)一個不僅審美在線,而且實用性極高的網(wǎng)站。創(chuàng)新互聯(lián)對網(wǎng)站制作、成都網(wǎng)站設(shè)計、網(wǎng)站制作、網(wǎng)站開發(fā)、網(wǎng)頁設(shè)計、網(wǎng)站優(yōu)化、網(wǎng)絡(luò)推廣、探索永無止境。
圖片來自 Pexels
Kafka 是一套流處理系統(tǒng),可以讓后端服務(wù)輕松的相互溝通,是微服務(wù)架構(gòu)中常用的組件。
生產(chǎn)者服務(wù) Producer 向 Kafka 發(fā)送消息,消費者服務(wù) Consumer 監(jiān)聽 Kafka 接收消息。
一個服務(wù)可以同時為生產(chǎn)者和消費者。
Topic 是生產(chǎn)者發(fā)送消息的目標(biāo)地址,是消費者的監(jiān)聽目標(biāo)。
一個服務(wù)可以監(jiān)聽、發(fā)送多個 Topics。
Kafka 中有一個【consumer-group(消費者組)】的概念。
這是一組服務(wù),扮演一個消費者。
如果是消費者組接收消息,Kafka 會把一條消息路由到組中的某一個服務(wù)。
這樣有助于消息的負(fù)載均衡,也方便擴展消費者。
Topic 扮演一個消息的隊列。首先,一條消息發(fā)送了。
然后,這條消息被記錄和存儲在這個隊列中,不允許被修改。
接下來,消息會被發(fā)送給此 Topic 的消費者。
但是,這條消息并不會被刪除,會繼續(xù)保留在隊列中。
繼續(xù)發(fā)送消息。
像之前一樣,這條消息會發(fā)送給消費者、不允許被改動、一直呆在隊列中。(消息在隊列中能呆多久,可以修改 Kafka 的配置)
上面 Topic 的描述中,把 Topic 看做了一個隊列,實際上,一個 Topic 是由多個隊列組成的,被稱為【Partition(分區(qū))】。
這樣可以便于 Topic 的擴展。
生產(chǎn)者發(fā)送消息的時候,這條消息會被路由到此 Topic 中的某一個 Partition。
消費者監(jiān)聽的是所有分區(qū)并消耗所有人的事件。
生產(chǎn)者發(fā)送消息時,默認(rèn)是面向 Topic 的,由 Topic 決定放在哪個 Partition,默認(rèn)使用輪詢策略。
也可以配置 Topic,讓同類型的消息都在同一個 Partition。
例如,處理用戶消息,可以讓某一個用戶所有消息都在一個 Partition。
例如,用戶 1 發(fā)送了 3 條消息:A、B、C,默認(rèn)情況下,這 3 條消息是在不同的 Partition 中(如 P1、P2、P3)。
在配置之后,可以確保用戶 1 的所有消息都發(fā)到同一個分區(qū)中(如 P1)。
這個功能有什么用呢?這是為了提供消息的【有序性】。
消息在不同的 Partition 是不能保證有序的,只有一個 Partition 內(nèi)的消息是有序的。
Kafka 是集群架構(gòu)的,ZooKeeper是重要組件。
ZooKeeper 管理著所有的 Topic 和 Partition。
Topic 和 Partition 存儲在 Node 物理節(jié)點中,ZooKeeper負(fù)責(zé)維護這些 Node。
例如,有 2 個 Topic,各自有 2 個 Partition。
這是邏輯上的形式,但在 Kafka 集群中的實際存儲可能是這樣的:
Topic A 的 Partition #1 有 3 份,分布在各個 Node 上。
這樣可以增加 Kafka 的可靠性和系統(tǒng)彈性。
3 個 Partition #1 中,ZooKeeper 會指定一個 Leader,負(fù)責(zé)接收生產(chǎn)者發(fā)來的消息。
其他 2 個 Partition #1 會作為 Follower,Leader 接收到的消息會復(fù)制給 Follower。
這樣,每個 Partition 都含有了全量消息數(shù)據(jù)。
即使某個 Node 節(jié)點出現(xiàn)了故障,也不用擔(dān)心消息的損壞。
Topic A 和 Topic B 的所有 Partition 分布可能就是這樣的:
感謝閱讀,希望對你有所幫助!
編輯:陶家龍
出處:https://timothystepro.medium.com/visualizing-kafka-20bc384803e7

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流