Kafka介紹和原理

2021-08-21 20:55:12 字數 2277 閱讀 8259

簡而言之,kafka是一種mq,現在有很多開源的mq,包括activemq,rokectmq,

rabbitmq和kafka等等。還有些大型網際網路公司內部不開源的mq,比如阿里巴巴的metaq,京東的jmq等等。

kafka是強依賴於zookeeper的,所以,如果想深入了解kafka,需要熟悉zookeeper。下面是kafka的架構圖,網上找的,整體結構畫的很清晰了。

kafka集群中有很機器,不管是物理的還是虛擬的,在kafka中每台機器都叫乙個broker。然而在這些機器中,有乙個是broker會成為controller,是通過zookeeper選舉得出的,這個broker controller就是kafka集群中的leader,其他的為follwer。

broker controller的選舉

kafka的leader選舉與zookeeper集群leader選舉不一樣,zookeeper集群,是通過paxos演算法,通過不同節點向其他節點傳送資訊來投票選舉出leader,但是kafka的leader的選舉就沒有這麼複雜。

kafka的leader選舉是通過在zookeeper上建立/controller臨時節點來實現leader選舉,並在該節點中寫入當前broker的資訊

利用zookeeper的強一致性特性,乙個節點只能被乙個客戶端建立成功,建立成功的broker即為leader,即先到先得原則,leader也就是集群中的controller,其他的機器會使用zk watch機制,watch這個controller臨時節點。當leader宕機或者是網路故障導致session超時等原因與zookeeper失去鏈結,zookeeper會自動刪除這個節點,其他的broker也就會收到通知,說明leader掛了,重新發起leader選舉。

topic & broker & partition & replica

每乙個topic在kafka集群中會被拆成很多的partition,打個比方乙個topic有10w條訊息,可以拆成10個partition,每個接近1w,當然不會那麼平均。partition數量可以配置,然而,每乙個partition又可以有多個副本,對於副本我們叫replica。

上面這種圖來自於我覺得畫的挺好的,下面是摘自原文的一段話。

圖中有4個 kafka brokers,並且topic1有四個 partition(用藍色表示)分布在4個 brokers 上,為 leader replica;

且每個 partition 都有兩個 follower replicas(用橘色表示),分布在和 leader replica 不同的 brokers。

這個分配演算法很簡單,有興趣的可以參考kafka的design。

然後又會引出另乙個問題,partition leader怎麼選舉的,他並不是通過zk選出來的。

partition leader的選舉

從上面broker controller的選舉我們知道,

其他的broker follower會監聽controller是否還活著,相反controller也會監聽其他的kafka broker的所有資訊。

如果controller宕機了,會重新選主。

kafka會在zookeeper上針對每個topic維護乙個稱為isr(in-sync replica,已同步的副本)的集合,

該集合中是一些分割槽的副本。只有當這些副本都跟leader中的副本同步了之後,kafka才會認為訊息已提交,

並反饋給訊息的生產者。如果這個集合有增減,kafka會更新zookeeper上的記錄

如果其他broker宕機了, controller會讀取該死機broker上所有的partition在zookeeper上的狀態,

並選取isr列表中的乙個replica作為partition leader,這個broker宕機的事情,controller也會通知zookeeper,zookeeper就會通知其他的kafka broker。

(如果isr列表中的replica全掛,選乙個倖存的replica作為leader; 如果該partition的所有的replica都宕機了,則將新的leader設定為-1,等待恢復,等待isr中的任乙個replica「活」過來,並且選它作為leader;或選擇第乙個「活」過來的replica(不一定是isr中的)作為leader)

Kafka 原理介紹

kafka是乙個分布式訊息佇列。kafka對訊息儲存時根據topic進行歸類,傳送訊息者稱為producer,訊息接受者稱為consumer,此外kafka集群有多個kafka例項組成,每個例項 server 稱為broker。無論是kafka集群,還是consumer都依賴於zookeeper集群...

kafka工作原理介紹

中間的kafka cluster,儲存訊息,是由多個server組成的集群。2 topic與訊息 kafka將所有訊息組織成多個topic的形式儲存,而每個topic又可以拆分成多個partition,每個partition又由乙個乙個訊息組成。每個訊息都被標識了乙個遞增序列號代表其進來的先後順序,...

一 kafka介紹和搭建

kafka是乙個分布式訊息佇列。具有高效能 持久化 多副本備份 橫向擴充套件能力。生產者往佇列裡寫訊息,消費者從佇列裡取訊息進行業務邏輯。一般在架構設計中起到解耦 削峰 非同步處理的作用。2.解壓並移動,然後建立日誌目錄 tar zxvf kafka 2.12 2.1.1 tgz mv kafka ...