kafka源碼解析之八:Broker分析

      網友投稿 894 2025-04-02

      1????? Broker分析

      1.1??????? Broker internals視圖

      1.2??????? Network Layer

      Kafka使用NIO自己實現了網絡層的代碼, 而不是采用netty, mina等第三方的網絡框架。從性能上來講,這一塊的代碼不是性能的瓶頸。

      它采用IO多路復用和多線程下的Reactor模式,主要實現類包括SocketServer, Acceptor, Processor和RequestChannel。

      Kafka的服務器由SocketServer實現,它是一個NIO的服務器,線程模型如下:

      l? 1個Acceptor線程負責處理新連接

      l? N個Processor線程, 每個processor都有自己的selector,負責從socket中讀取請求和發送response

      l? M個Handler線程處理請求,并產生response給processor線程

      可以從上面的圖形中看到Acceptor, Processor和Handler的功能

      1.???? Boker在啟動的時候會調用SocketServer的startup方法如下。它為每個Processor生成一個線程并啟動,然后啟動一個Acceptor線程

      2.???? Acceptor是一個典型NIO 處理新連接的方法類

      3.???? 將新的連接均勻地分配給一個Processor。通過accept方法配置網絡參數,并交給processor讀寫數據

      kafka源碼解析之八:Broker分析

      4.???? Processor的accept方法將新連接加入它的新連接待處理隊列中

      5.???? Processor線程的主處理邏輯如下, 這是一個死循環,會一直處理這些連接的讀寫,這也是一個標準的NIO的處理代碼

      2.1??????? API Layer

      API層的主要功能是由KafkaApis類實現的。

      根據配置Kafka生成了一組KafkaRequestHandler線程,叫做KafkaRequestHandlerPool:

      遺留問題: 多個線程并發處理請求,如何保證message的讀寫的順序性。

      KafkaRequestHandler不斷的從requestChannel隊列里面取出request交給apis處理

      apis根據不同的請求類型調用不同的方法進行處理。

      顯然,此處處理的速度影響Kafka整體的消息處理的速度。

      這里我們分析一個處理方法handleProducerRequest。

      這里會調用replicaManager.appendMessages處理Kafka message的保存和備份,也就是leader和備份節點上。

      這里會調用replicaManager.appendMessages處理Kafka message的保存和備份,也就是leader和備份節點上。

      3.1??????? Replication Subsystem

      順藤摸瓜,我們進入replicaManager.appendMessages的代碼。

      這個方法會將消息放到leader分區上,并復制到備份分區上。在超時或者根據required acks的值及時返回response。

      遺留問題: 對于同步Producer的寫,是否阻塞 API 層的處理線程 ?

      4.1??????? Log Subsystem

      LogManager負責管理Kafka的Log(Kafka消息), 包括log/Log文件夾的創建,獲取和清理。它也會通過定時器檢查內存中的log是否要緩存到磁盤中。重要的類包括LogManager和Log。

      5.1??????? OffsetManager

      負責管理offset,提供offset的讀寫。

      6.1??????? TopicConfigManager

      它負責動態改變Topic的配置屬性。

      如果某個topic的配置屬性改變了,Kafka會在ZooKeeper上創建一個類似/brokers/config_changes/config_change_13321的節點, topicConfigManager會監控這些節點, 獲得屬性改變的topics并處理,實際上以新的LogConfig替換老的:

      任務調度 Kafka

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:凍結第三行和第三列要怎么操作?
      下一篇:如何在WPS2012中創建目錄如何自動生成目錄并指定目錄級別
      相關文章
      亚洲一区二区久久| 亚洲日韩v无码中文字幕| 亚洲av成人无码久久精品| 亚洲乱码中文字幕手机在线 | 亚洲久热无码av中文字幕| 亚洲伊人久久大香线蕉在观| 亚洲精品一区二区三区四区乱码| 久久亚洲国产伦理| 亚洲成色www久久网站夜月| 亚洲女初尝黑人巨高清| 国产亚洲无线码一区二区| 日本红怡院亚洲红怡院最新| 亚洲av无码乱码国产精品| 亚洲AV一宅男色影视| 亚洲精品免费在线观看| 亚洲一区二区在线免费观看| 亚洲精品视频免费在线观看| 亚洲成a人片77777群色| 亚洲国产av高清无码| 亚洲国产综合精品中文第一| 亚洲日韩精品国产3区 | 久久91亚洲人成电影网站| 亚洲春色在线视频| 亚洲黄色一级毛片| 亚洲久悠悠色悠在线播放| 亚洲精品永久在线观看| 免费亚洲视频在线观看| 亚洲一区二区三区免费| 国产亚洲av片在线观看播放 | 亚洲 日韩 色 图网站| 亚洲JIZZJIZZ妇女| 亚洲av无码天堂一区二区三区| 亚洲成A人片在线观看无码3D | 亚洲AV成人噜噜无码网站| 亚洲天然素人无码专区| 在线观看免费亚洲| 国产亚洲精品无码专区| 久久久久久亚洲精品中文字幕| 亚洲无人区视频大全| 亚洲日韩精品无码专区加勒比☆ | 亚洲国产午夜中文字幕精品黄网站|