---
# System prepended metadata

title: 元件程式碼位置

---

## 架構解決問題
### 背景
- Kafka 作為分散式訊息系統，需要在多節點環境中維持高可用性（HA）與元數據一致性（Metadata Consistency）。
- 隨著 KRaft 模式引入，系統從 ZooKeeper 過渡到內建 Raft 共識機制，進一步提升一致性與簡化部署。

### 問題
- Metadata 更新衝突：多個 Broker 更新 metadata 易造成資料不一致。
- 單點故障風險：如果 metadata 管理集中在單一節點，會有故障風險。
- 動態變更難題：需要在不中斷服務情況下動態修改 ACL、Config 等。
- 強一致性需求：關鍵 metadata（如 topic/broker 狀態）必須在整個系統中保持同步。

### 整體設計解法
- 將系統明確分成 Broker 與 Controller 角色。
- 由 Broker 將重要操作透過 Forwarding 轉送給 Controller 處理。
- Controller 透過 KafkaRaftServer (RaftClient) 進行 Raft 共識，確保元數據一致。
- 引入 Publishers 機制，支援動態設定更新。

### 各個 Component 的角色與解決的問題

#### Client 端
- **Producer / Consumer / Admin / Kafka Streams / Connect**
  - 解決問題：提供各種應用層級的操作介面，如寫入、讀取、管理等。
  - 目的：讓外部服務或用戶與 Kafka 互動。

#### Broker 端
- **SocketServer**
  - 解決問題：接收 Client 的請求，處理 TCP 連線。
- **KafkaApis**
  - 解決問題：統一解析與分派請求，例如 Produce、Fetch、Metadata 查詢等。
- **GroupCoordinator**
  - 解決問題：管理 Consumer Group，確保 group rebalancing 正確運作。
- **TransactionCoordinator**
  - 解決問題：支援跨 partition 的兩階段提交（2PC），實現精確一次（Exactly-Once）處理。
- **ReplicaManager**
  - 解決問題：管理 partition 副本同步，確保資料可靠性與副本一致性。
- **MetadataCache (Broker)**
  - 解決問題：本地快取 Controller 更新後的 Metadata，減少查詢延遲。
- **AutoTopicCreationManager**
  - 解決問題：當 Consumer/Producer 請求不存在的 topic 時，自動創建 topic。
- **ForwardingManager**
  - 解決問題：將需要修改 metadata 的操作，轉送到 Controller，避免直接修改產生衝突。
- **RaftClient**
  - 解決問題：與其他節點共同參與 Raft 共識，維護 metadata log 的一致性。
- **BrokerLifecycleManager**
  - 解決問題：維護 broker 的生命週期（啟動、關閉、heartbeat 狀態同步到 Controller）。

#### Controller 端
- **SocketServer (Controller)**
  - 解決問題：接受來自 Broker 的 forwarding 請求。
- **ControllerApis**
  - 解決問題：解析 Broker 發來的 Controller 專屬請求，如 Metadata 更新、ACL 變更等。
- **QuorumController**
  - 解決問題：主導 Metadata Mutation（變更元數據），確保更新經過 Raft 共識並持久化。
- **MetadataCache (Controller)**
  - 解決問題：本地緩存最新的元數據，提供快速回應。
- **CredentialProvider**
  - 解決問題：管理並存取安全認證資訊（如 SCRAM 憑證、ACL 規則等）。
- **Publishers**
  - **DynamicConfigPublisher**
    - 解決問題：支援動態更新 Broker/Topic/Client 層級的設定。
  - **ScramPublisher**
    - 解決問題：支援 SCRAM 資料的即時變更與同步。
  - **AclPublisher**
    - 解決問題：支援 ACL（Access Control List）即時變更，強化安全性。

### 成效
- 高可用性（HA）：故障時自動重新選舉 Controller，持續服務不中斷。
- 強一致性：透過 Raft 保證 metadata 同步。
- 動態配置能力：支援動態變更設定與存取控制，無需重啟服務。
- 系統簡化：移除 ZooKeeper 依賴，降低運維負擔。


## 程式碼位置
Client

Producer (把資料送到 Kafka Topic)、Consumer (從 Kafka Topic 讀取資料)、Admin (管理 Kafka Cluster 例如建立 Topic、管理 ACL)

https://github.com/apache/kafka/tree/trunk/clients/src/main/java/org/apache/kafka/clients

Streams (在 Kafka 上做資料流轉換與處理)

https://github.com/apache/kafka/tree/trunk/streams/src/main/java/org/apache/kafka/streams

Connect (連接外部系統：資料同步到 Kafka 或從 Kafka 匯出)

https://github.com/apache/kafka/tree/trunk/connect

Server

SocketServer

https://github.com/apache/kafka/core/src/main/scala/kafka/network/SocketServer.scala

KafkaApis

https://github.com/apache/kafka/blob/trunk/core/src/main/scala/kafka/server/KafkaApis.scala

GroupCoordinator

https://github.com/apache/kafka/tree/trunk/core/src/main/scala/kafka/coordinator/group

TransactionCoordinator

https://github.com/apache/kafka/tree/trunk/core/src/main/scala/kafka/coordinator/transaction

https://github.com/apache/kafka/tree/trunk/transaction-coordinator/src

ReplicaManager

https://github.com/apache/kafka/blob/trunk/core/src/main/scala/kafka/server/ReplicaManager.scala

LogManager

https://github.com/apache/kafka/blob/trunk/core/src/main/scala/kafka/log/LogManager.scala

Topics/Partitions

MetadataCache

https://github.com/apache/kafka/blob/trunk/core/src/main/scala/kafka/server/metadata/KRaftMetadataCache.scala

AutoTopicCreationManager

https://github.com/apache/kafka/blob/trunk/core/src/main/scala/kafka/server/AutoTopicCreationManager.scala

QuorumController

https://github.com/apache/kafka/blob/trunk/metadata/src/main/java/org/apache/kafka/controller/QuorumController.java

KafkaRaftServer

https://github.com/apache/kafka/blob/trunk/core/src/main/scala/kafka/server/KafkaRaftServer.scala

RaftClient

https://github.com/apache/kafka/blob/trunk/raft/src/main/java/org/apache/kafka/raft/RaftClient.java

BrokerLifecycleManager

https://github.com/apache/kafka/blob/trunk/core/src/main/scala/kafka/server/BrokerLifecycleManager.scala

__cluster_metadata Topic

沒有單獨的 code，屬於 Kafka 內建處理（由 QuorumController 和 LogManager 共同維護）