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