kafka掃盲篇

1.kafka是什麼?

kafka是一個消息中間件,是一種分佈式消息發佈--訂閱系統。它的作用可以通過一個例子來粗略理解:

例:有兩個角色,生產者---用於生產雞蛋、消費者---消費雞蛋,生產者直接把生產的雞蛋提供給消費者,考慮幾個情景:

       i)如果生產者一單位時間內生產一個雞蛋,而消費者一單位時間內消費一個雞蛋,則該過程可以順利進行;

       ii)如果生產者生產一個雞蛋,而消費者在喫雞蛋的過程中噎住了(信息堵塞),但是生產者仍繼續生產,就會導致新生產的雞蛋丟失了(無人消費)。

       iii)如果生產者一單位時間生產十個雞蛋,但是消費者一單位時間只能消費5個雞蛋,生產大於消費,仍會導致雞蛋丟失。

情景i)和ii)是使用一般的通信方法會帶來的問題。爲了解決這種問題,我們可以找一箇中間組件:如果我們有一個籃子,該籃子用於存放生產者所生產的雞蛋,而消費者從籃子裏獲取雞蛋進行消費。採用這種方式的話,我們就只需要考慮籃子夠不夠大?只要籃子夠大,生產者生產的雞蛋就不會丟失了。

如果把消息當成上述例子中的雞蛋,把消息發送方當成生產者,把消息接收方當成消費者,則kafka的作用就類似於籃子,給消息提供一箇中間存放的平臺,來保證消息不會應爲接收方出現問題而丟失。

2.kafka中的角色

Broker:安裝了kafka的節點

Topic:話題,kafka是根據話題對消息進行分類存儲的,每條消息都歸屬與一個話題

partition:分區,每個主題都有多個分區,一條消息會存入一個分區

Replicate:副本,每個分區有多個副本(備份),用來防止數據丟失

Leader:每個分區的管理者,kafka的讀寫都是通過leader完成的

Follower:當Leader掛了之後,會從Follower中選舉新的Leader

Producer:生產者,向主題中寫入數據

Consumer:消費者,從主題中讀取數據

Consumer Group:消費組

Controller:管理者(zookeeper集羣),完成leader選舉之類的。

3.kafka的讀寫

i)生產者在向kafka寫入數據的時候,需要指定寫入的主題(topic),然後按順序進行磁盤寫入

ii)消費者往kafka讀取數據時,也需要指定讀取的主題,讀取方式是,先讀取完一個數據分區之後,纔會讀取下一個數據分區,因此,我們獲取得到的數據順序並不一定寫入的順序。

iii)一條數據只能被同一個Consumer Group消費一次。因爲kafka會給每一個group對每個分區分配一個偏移量(我覺得可以理解爲順序表的讀取方式)來記錄這個group獲取到消息隊列中的哪個位置。

iv)數據讀取時,數據的定位方法  topic--> group --> partition --> offset(偏移量)

4.kafka的一些管理機制

i)所有的leader均勻分佈在所有的broker上

ii)副本數不超過broker數量

iii)如果某節點掛了,會爲該節點擔任leader的分區重新選舉leader

iv)經過一定時間段,系統會重新分配leader,來保證leader均勻分佈在所有broker上 (rebalance)

v)消費時,默認從最新數據開始消費,可通過參數選擇是否從頭開始消費

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章