Kafka 中兩個重要概念 主題與分割槽

2021-10-17 10:51:12 字數 1335 閱讀 8560

在 kafka 中還有兩個特別重要的概念—主題(topic)與分割槽(partition)。kafka 中的訊息以主題為單位進行歸類,生產者負責將訊息傳送到特定的主題(傳送到 kafka 集群中的每一條訊息都要指定乙個主題),而消費者負責訂閱主題並進行消費。

主題是乙個邏輯上的概念,它還可以細分為多個分割槽,乙個分割槽只屬於單個主題,很多時候也會把分割槽稱為主題分割槽(topic-partition)。同一主題下的不同分割槽包含的訊息是不同的,分割槽在儲存層面可以看作乙個可追加的日誌(log)檔案,訊息在被追加到分割槽日誌檔案的時候都會分配乙個特定的偏移量(offset)。

offset 是訊息在分割槽中的唯一標識,kafka 通過它來保證訊息在分區內的順序性,不過 offset 並不跨越分割槽,也就是說,kafka 保證的是分割槽有序而不是主題有序。

如上圖所示,主題中有4個分割槽,訊息被順序追加到每個分割槽日誌檔案的尾部。kafka 中的分割槽可以分布在不同的伺服器(broker)上,也就是說,乙個主題可以橫跨多個 broker,以此來提供比單個 broker 更強大的效能。

每一條訊息被傳送到 broker 之前,會根據分割槽規則選擇儲存到哪個具體的分割槽。如果分割槽規則設定得合理,所有的訊息都可以均勻地分配到不同的分割槽中。如果乙個主題只對應乙個檔案,那麼這個檔案所在的機器i/o將會成為這個主題的效能瓶頸,而分割槽解決了這個問題。在建立主題的時候可以通過指定的引數來設定分割槽的個數,當然也可以在主題建立完成之後去修改分割槽的數量,通過增加分割槽的數量可以實現水平擴充套件。

kafka 為分割槽引入了多副本(replica)機制,通過增加副本數量可以提公升容災能力。

同一分割槽的不同副本中儲存的是相同的訊息(在同一時刻,副本之間並非完全一樣),副本之間是「一主多從」的關係,其中 leader 副本負責處理讀寫請求,follower 副本只負責與 leader 副本的訊息同步。副本處於不同的 broker 中,當 leader 副本出現故障時,從 follower 副本中重新選舉新的 leader 副本對外提供服務。kafka 通過多副本機制實現了故障的自動轉移,當 kafka 集群中某個 broker 失效時仍然能保證服務可用。

如上圖所示,kafka 集群中有4個 broker,某個主題中有3個分割槽,且副本因子(即副本個數)也為3,如此每個分割槽便有1個 leader 副本和2個 follower 副本。生產者和消費者只與 leader 副本進行互動,而 follower 副本只負責訊息的同步,很多時候 follower 副本中的訊息相對 leader 副本而言會有一定的滯後。

Capture CIS中兩個重要概念

orcad capture cis中兩個重要概念 instance 和 occurrences 用orcad設計原理圖必須理解兩個概念instance 和 occurrences。對於元件放置 替換 修改屬性等很多操作都和這兩個概念有關。拋開抽象的說明,我們用例項說明他們的區別。假如你在自己的元件庫...

spring兩個重要屬性

1.lazy init 以上兩個bean,乙個lazy init屬性為true,乙個為false,由什麼區別呢 當ioc容器啟動時,service2會例項化,而service1則不會 但是但容器例項化service2時,service1也被例項化了,為什麼呢,因為service2需要它。也就是說la...

理解Spring中兩個核心的概念IOC與AOP

ioc和aop是spring中的兩個核心的概念,下面談談對這兩個概念的理解。ioc inverse of control 控制反轉,也可以稱為依賴倒置。所謂依賴,從程式的角度看,就是比如a要呼叫b的方法,那麼a就依賴於b,反正a要用到b,則a依賴於b。所謂倒置,你必須理解如果不倒置,會怎麼著,因為a...