Kafka 簡介

問題:

  • 集羣角色
  • 副本
  • leader選舉
  • 數據存儲
  • 通過offset查找message
  • toptic 分區
  • 集羣消費

集羣角色

每個分區有一個爲leader,其他都爲follower,leader處理partition的所有讀寫請求,與此同時,follower會被動定期地去複製leader上的數據。 性能受最後一個同步數據的分區界節點決定。

副本

kafka中的副本機制是以分區粒度進行復制的,我們在kafka中創建 topic的時候,都可以設置一個複製因子,這個複製因子決定着分區副本的個數,如果leader 掛掉了,kafka 會把分區主節點failover到其他副本節點,這樣就能保證這個分區的消息是可用的。

leader選舉

如果某個分區的Leader掛了,那麼其它跟隨者將會進行選舉產生一個新的leader,之後所有的讀寫就會轉移到這個新的Leader上,在kafka中會在Zookeeper上針對每個Topic維護一個稱爲ISR(in-sync replica,已同步的副本)的集合,顯然還有一些副本沒有來得及同步。只有這個ISR列表裏面的纔有資格成爲leader(先使用ISR裏面的第一個,如果不行依次類推,因爲ISR裏面的是同步副本,消息是最完整且各個節點都是一樣的)。

數據存儲

每一個partiton是一個目錄,一個目錄裏面被分成多個segment(段)數據文件,segment數據文件由2大部分組成,分別爲index file和data file,此2個文件一一對應,成對出現,後綴”.index”和“.log”分別表示爲segment索引文件、數據文件.

通過offset查找message

例如讀取offset=368776的message,需要通過下面2個步驟查找。

第一步查找segment file 上述圖2爲例,其中00000000000000000000.index表示最開始的文件,起始偏移量(offset)爲0.第二個文件00000000000000368769.index的消息量起始偏移量爲368770 = 368769 + 1.同樣,第三個文件00000000000000737337.index的起始偏移量爲737338=737337 + 1,其他後續文件依次類推,以起始偏移量命名並排序這些文件,只要根據offset 二分查找文件列表,就可以快速定位到具體文件。 當offset=368776時定位到00000000000000368769.index|log

第二步通過segment file查找message 通過第一步定位到segment file,當offset=368776時,依次定位到00000000000000368769.index的元數據物理位置和00000000000000368769.log的物理偏移地址,然後再通過00000000000000368769.log順序查找直到offset=368776爲止。

Toptic 分區

Kafka中可以將Topic從物理上劃分成一個或多個分區(Partition),每個分區在物理上對應一個文件夾,以”topicName_partitionIndex”的命名方式命名,該文件夾下存儲這個分區的所有消息(.log)和索引文件(.index),這使得Kafka的吞吐率可以水平擴展。

創建分區:在創建Toptic的時候可以指定分區數量,一般設置成節點的整數倍。
生產消息:根據key和不同的分區策略將數據存到不同的分區。
好處: 可以水平擴展容量。
順序性:每一個分區的數據是順序存儲的,消費者在消費的時候由於一個toptic可能存在不同的分區上導致最終的數據可能不是有序的。

集羣消費

同一個toptic可以有多個消費者消費,當兩個消費者使用同一個group.id時就是一個集羣消費,當不是一個group.id時每一個消費者都可以讀取該toptic的全部消息。


kafka 常見問題:

https://blog.csdn.net/yjh314/article/details/77568580

https://blog.csdn.net/caisini_vc/article/details/48007297

https://blog.csdn.net/u013920292/article/details/78815161#commentBox

http://trumandu.github.io/2019/04/13/Kafka面試題與答案全套整理/

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