Kafka初始化流程與請求處理

Kafka的初始化啟動流程

  • 由KafkaServer::startup來負責;
  • KafkaServer::startup主要是創建并啟動各種Manager;
  • 上圖:
kafkaserver_startup.png
  • KafkaHealthcheck: core/src/main/scala/kafka/server/KafkaHealthcheck.scala,其作用是在broker info注冊到zk的/brokers/id路徑下, 且監聽zk的session expiration事件,觸發時重新注冊;

  • 上圖中的各個啟動的組件我們慢慢都會介紹到, 先從請求的接收與響應開始~~~

請求處理

  • SocketServer: 負責處理網絡連接, 數據的接收和發送, 其中的RequestChannel負責向應用層轉遞請求,也負責把應用層的response傳回網絡層后發送出去;
    詳細見:Kafka源碼分析-網絡層-1 Kafka源碼分析-網絡層-2 Kafka源碼分析-網絡層-3
  • KafkaRequestHandlerPool: 線程池, 每個線程里跑一個KafkaRequestHandler
  • KafkaRequestHandler: 循環調用RequestChannel::receiveRequest來poll到新的request交給KafkaApis處理;
  • KafkaApis: 處理request的分發
request.requestId match {
        case RequestKeys.ProduceKey => handleProducerRequest(request)
        case RequestKeys.FetchKey => handleFetchRequest(request)
        case RequestKeys.OffsetsKey => handleOffsetRequest(request)
        case RequestKeys.MetadataKey => handleTopicMetadataRequest(request)
        case RequestKeys.LeaderAndIsrKey => handleLeaderAndIsrRequest(request)
        case RequestKeys.StopReplicaKey => handleStopReplicaRequest(request)
        case RequestKeys.UpdateMetadataKey => handleUpdateMetadataRequest(request)
        case RequestKeys.ControlledShutdownKey => handleControlledShutdownRequest(request)
        case RequestKeys.OffsetCommitKey => handleOffsetCommitRequest(request)
        case RequestKeys.OffsetFetchKey => handleOffsetFetchRequest(request)
        case RequestKeys.GroupCoordinatorKey => handleGroupCoordinatorRequest(request)
        case RequestKeys.JoinGroupKey => handleJoinGroupRequest(request)
        case RequestKeys.HeartbeatKey => handleHeartbeatRequest(request)
        case RequestKeys.LeaveGroupKey => handleLeaveGroupRequest(request)
        case RequestKeys.SyncGroupKey => handleSyncGroupRequest(request)
        case RequestKeys.DescribeGroupsKey => handleDescribeGroupRequest(request)
        case RequestKeys.ListGroupsKey => handleListGroupsRequest(request)
        case requestId => throw new KafkaException("Unknown api code " + requestId

上圖:

kafkaapis.png

下篇我們開始KafkaController分析-選主和Failover

Kafka源碼分析-匯總
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • kafka的定義:是一個分布式消息系統,由LinkedIn使用Scala編寫,用作LinkedIn的活動流(Act...
    時待吾閱讀 5,353評論 1 15
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,837評論 18 139
  • 姓名:周小蓬 16019110037 轉載自:http://blog.csdn.net/YChenFeng/art...
    aeytifiw閱讀 34,742評論 13 425
  • 本文轉載自http://dataunion.org/?p=9307 背景介紹Kafka簡介Kafka是一種分布式的...
    Bottle丶Fish閱讀 5,491評論 0 34
  • ** 今天看了一下kafka官網,嘗試著在自己電腦上安裝和配置,然后學一下官方document。** Introd...
    RainChang閱讀 5,039評論 1 30