Kafka筆記5(內部工做原理)

集羣成員關係:網絡

  Kafka使用zookeeper維護集羣成員信息,每一個broker擁有惟一標識符,這個標識符能夠在配置文件裏指定也能夠自動生成,會註冊到Zookeeper的/brokers/ids路徑下架構

控制器:併發

  本質就是一個broker,可是還負責分區首領選舉線程

  Kafka使用zookeeper的臨時節點來選舉控制器,並在節點加入集羣或退出集羣時通知控制器,控制器負責在節點加入或離開集羣時進行分區首領的選舉。控制器使用epoch來避免腦裂3d

複製:日誌

  複製功能時Kafka架構核心blog

  Kafka使用主題來組織數據,每一個主題分爲若干分區,每一個分區有多個副本,保存在broker上,每一個broker能夠保存成千上百屬於不一樣主題和分區的副本索引

  副本有如下2個類型:隊列

    首領副本: 每一個分區都有一個首領副本,全部的生產者請求和消費者請求都會通過這個副本kafka

    跟隨者副本:首領之外的副本都是跟隨者副本,跟隨者副本惟一任務是從首領那裏複製消息,保持與首領一致的狀態

        只有持續請求獲得消息的副本被稱爲同步的副本,首領失效時纔有機會成爲首領

           除了當前首領以外,每一個分區還有一個首選首領-------建立主題時選定的首領就是分區的首選首領

        auto.leader.rebalance.enable=true   會檢查首選首領是否是當前首領,若是不是,而且該副本是同步的,就會觸發首領選舉,讓首選首領成爲首領

        分區的副本清單裏第一個副本通常就是首選首領

處理請求:

  broker大部分工做就是處理客戶端/分區副本/控制器發送給分區首領的請求。Kafka提供了一個基於TCP的二進制協議,指定請求消息的格式以及broker如何對請求作出響應

  客戶端發起鏈接併發送請求,broker處理請求並作出響應,broker按照請求到達順序處理他們----這種順序保證讓Kafka具備消息隊列的特性,同時保證保存的消息也是有序的

  broker會在監聽的每個端口上運行一個Acceptor線程,這個線程會建立一個鏈接,並交給Processor線程處理,processor線程也稱爲網絡線程,負責從客戶端獲取請求消息,放進請求隊列,而後從響應隊列獲取響應消息,發送給客戶端

  

  

 

 索引:

  索引把偏移量映射到片斷文件和偏移量在文件裏的位置

  索引若出現損壞,Kafka會自動從新生成索引

每一個日誌片斷能夠分爲2個部分: 

  乾淨的部分    未清理過,每一個鍵只有一個對應的值

  污濁的部分   這些消息是上一次清理以後寫入的

  log.clear.enabled=true  kafka啓用清理功能

相關文章
相關標籤/搜索