Kafka知識點總結二

        上一節從各概念入手總結了Kafka的知識,這裏從系統結構展開,進一步總結Kafka的知識點。

        Kafka以集羣的方式部署,集羣由多個服務器(Broker)組成,每個Broker的Kafka由哪些層組成呢?答案是:SocketServer(Socket服務層)、KafkaRequestHandlerPool(請求轉發層)、Kafka api(業務邏輯層)、Control(集羣狀態控制層)、Kafka Healthcheck Broker (Broker健康檢測層)、TopicConfigManager(topic配置信息監控層)組成。

Broker共處理10種不同的Request:

         (1)ProducerRequest:消息生產者向Kafka集羣發送消息,或者消息消費者向Kafka集羣提交偏移量Offset的值;

         (2)TopicMetadataRequest:生產者或者消費者發送獲取Topic元數據信息的請求;

         (3)FetchRequest:消費者發送ReplicaFetcherThread獲取message的請求;

         (4)OffsetRequest: 消費者發送獲取某個Topic的偏移量的請求;

         (5)OffsetCommitRequest:消費者提交偏移量至KAFKA(集羣根據配置提交至ZK或者log) ;

          (6)OffsetFetchRequest: 消費者發送獲取自己提交到KAFKA上的偏移量(如果是ZK上,則消費者自己獲取)的請求;

          (7)LeaderAndIsrRequest:當某個Topic的Partition的Leader和Isr發生改變時,Controller發送通知給相應的Broker(比如說Leader掛了)的請求;

          (8)StopReplicaRequest: 當Broker停止時或者刪除某個Topic的分區的Replica時,Controller發送通知相應的Broker停止拷貝副本的請求;

          (9)UpdateMetadataRequest:當Topic的元數據信息發生變化時,Controller發送通知給相應的Broker的請求;

          (10)BrokerControlledShutdownRequest:當集羣內某個Broker關機的時候,Broker(作爲Leader的Controller)接收到的對應的Broker準備關機的請求 ;


1、SocketServer(Socket服務層)

        SocketSever內部開啓一個Acceptor(一個獨立的線程)接收Sock的網絡請求,以輪詢的方式將請求轉發給N個處理線程Processor,Processor將接受到的Request存放至阻塞隊列RequestQueue中M個處理線程從RequestChannel的請求阻塞隊列RequestQueue中獲取請求,調用Kafka Api處理,然後Processor從ResponseQueue[i]中取回對應的處理結果(每個Processor都有一個對應的編號i)

        SocketServer與KafkaRequestHandlerPool之間通過RequestChannel通信,Request與Response通過該通道傳輸數據。這樣Processor就負責接收Connection的Request併發送處理的結果Response,即Processor將各自對應的Connection的Request存 進RequestQueue中,然後對ResponseQueue[i]中取出對應的Response。

2、KafkaRequestHandlerPool(請求轉發層)

         開啓M個處理線程,從RequestChannel.RequestQueue中拿到具體的Request,然後把處理後的結果放到ResponseQueue[i]中。

3、Kafka Api(業務邏輯處理層)

        由Replica Manager(副本管理模塊)、Log Manager(日誌管理模塊)、Offset Manager(偏移量管理模塊)共同實現正常的業務邏輯。

        (1)Replica Manager(副本管理模塊):負責接收Controller的Command以完成Replica的管理工作,Command主要有兩種LeaderAndISRCommand和StopReplicaCommand,主要完成三件事:1)接受LeaderAndISRCommand命令 2)接受StopReplicaCommand命令 3)開啓定時線程maybeShrinkIsr發現那些已經沒有進行同步的複本;

        (2)Log Manager(日誌管理模塊):Partition在存儲層面都是Log文件,每個Log由多個LogSegment組成,每個LogSegment以本LogSegment的第一條爲索引進行Segment的管理;

        (3)Offset Manager(偏移量管理模塊):提供對Offset的保存和讀取,Kafka的Topic的偏移量有2種方式:1)由Zookeeper統一維護;2)Kafka內部的Offsets.storage參數保存。OffestsCache的更新機制分3種情況:1)produceRequest.requiredAcks == 0時,即不需要ack,則立刻調用putOffsets更新偏移量;2)produceRequest.requiredAcks == 1時,即需要立即返回response時,則立刻調用putOffsets更新偏移量;3)produceRequest.requiredAcks == -1時,即只有此批消息達到最小副本數的時候,通過ProducerRequestPurgatory
觸發調用putOffsets更新偏移量;

4、Controller(集羣狀態控制層)

        與Zookeeper對接,進行Leader的選舉,Leader負責Topic的創建與刪除、Topic的分區變化、Topic分區內部的副本變化、Broker的熱備份。




參考資料:

1、《Learning Apache Kafka, 2nd Edition》

2、http://blog.csdn.net/wl044090432/article/category/6123025/2

發佈了215 篇原創文章 · 獲贊 192 · 訪問量 72萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章