Kafka概念、組成、機制

1、概念

Kafka是分佈式的、可分區的,可複製的消息系統。

2、原理

【待補充】

3、組成

1Topics/Logs

一個topic是對一組消息的歸納。

每個topic將被分成多個partition,每個partition在存儲層面是append log文件。

任何發佈到此partition的消息都會被直接追加到log文件的尾部,每條消息在文件中的位置成爲offsetoffset爲一個long型數字,它是一條消息的唯一標記。

kafka沒有提供其他索引機制來存儲offset,因爲kafka幾乎不允許對消息隨機讀寫。

一個topic的多個partition被分佈在kafka集羣中的多個server上。

每個server負責partition中的消息的讀寫操作。

2Producer

producer將消息發佈到它指定的topic中,並負責決定發佈到哪個分區。

通常簡單的由負載均衡機制隨機選擇分區,但也可以通過特定的分區函數選擇分區。

使用更多的第二種。

3Consumer

Consumer可以加入某個consumer組,共同競爭一個topictopic中的消息將被分發到組中的某個成員。

同一組中的consumer可以在不同的程序中,也可以在不同的機器上。

若所有的consumer同屬於一個組,就可以成爲隊列模式,在各個Consumer中實現負載均衡。

若所有的Consumer各屬不同組,就可以成爲發佈-訂閱模式,所有消息被分發到所有Consumer

常見的是:

每個topic都有若干數量的consumer組,每個組都是一個邏輯上的訂閱者。

爲了容錯和更好的穩定性,每個組由若干consumer組成。

其實就是一個發佈-訂閱模式,只不過訂閱者是組而不是單個consumer

4、機制

1)備份

kafka可以配置partition需要備份的個數,每個partition將會被備份到多臺機器,以提高可用性。

每個partition都有一個server爲“leader”,leader負責所有的讀寫操作,如果leader失效,那麼將會有其他的follower來接管。

follower只是跟進leader,同步消息。

作爲leader的服務器承擔了全部的請求壓力,因此從集羣的整體考慮,有多少個partition就應該有多少個leader

kafka會將leader均衡地分散在每個實例上,來確保整體的性能穩定。

2)持久化

kafka直接將數據寫到文件系統的日誌中。

對於主要用於日誌處理的消息系統,數據的持久化可以簡單地通過將數據追加到文件中實現,讀的時候從文件中讀就好。這樣做的好處是讀寫都是O(1),並且讀操作不會阻塞寫操作和其他操作。

爲了減少磁盤寫入的次數,broker會將消息暫時buffer起來,當消息的個數達到一定閾值時,再flush到磁盤,這樣減少了磁盤IO調用的次數。

3)日誌

【待補充】

4)主從同步

【待補充】


這段時間真是忙毀,上週末搬家,來這裏到現在還沒收拾好屋子,還沒網絡,這篇博文也是開的手機熱點發的,且看,後續再完善。

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