apache kraft 與 raft
可以先了解raft與 kraft 前身 zookeeper
為何要用KRaft
Kafka KRaft 是 Kafka 2.8 版本中引入的一個新特性,用於取代 ZooKeeper 作為 Kafka 集群的元數據管理服務。Kafka KRaft 基於 Raft 共識協議,具有更高的可靠性和性能,並且可以更好地支持 Kafka 集群的擴展和管理。
graph TD
A[簡化架構] --> B[移除 ZooKeeper 依賴]
A --> C[統一的元數據管理]
A --> D[降低運維複雜度]
B --> E[減少系統組件]
C --> F[提高可靠性]
D --> G[簡化配置和部署]
關鍵角色
graph LR
A[Controller Quorum] --> B[Leader Controller]
A --> C[Follower Controllers]
B --> D[Broker 集群]
D --> E[元數據存儲]
Kafka KRaft vs Raft
特性 | Raft | Kafka KRaft |
---|---|---|
目的 | 通用分散式一致性協議 | Kafka專用,取代ZooKeeper |
架構複雜度 | 較複雜,需外部服務 | 較簡單,內建於Kafka |
擴展性 | 一般 | 針對Kafka優化 |
性能 | 通用性能 | 針對Kafka優化性能 |
KRaft 對於raft 的變革
kraft 設定定期時間拉取日誌,取代raft 中以 leader 發送為主的機制,這樣可以減少leader的負擔,並且可以更好的支持多個follower的情況。
graph TD
subgraph "Follower拉取機制"
A[初始化Fetch請求] --> B[設置Fetch參數]
B --> C[發送Fetch請求]
C --> D[接收響應]
D --> E[處理數據]
E --> F[更新本地狀態]
F --> G[發送進度報告]
G --> A
end
KRaft運作流程
sequenceDiagram
participant Leader
participant Follower1
participant Follower2
rect rgb(200, 220, 255)
Note over Follower1,Follower2: Fetch Loop 階段
loop 週期性拉取
Follower1->>Leader: 1. FetchRequest(fetchOffset)
Follower2->>Leader: 1. FetchRequest(fetchOffset)
Leader-->>Follower1: 2. FetchResponse(records, highWatermark)
Leader-->>Follower2: 2. FetchResponse(records, highWatermark)
Note over Follower1,Follower2: 3. 處理接收到的數據
end
end
rect rgb(230, 230, 250)
Note over Leader,Follower2: 確認與提交
Follower1->>Leader: 4. 發送最新Offset
Follower2->>Leader: 4. 發送最新Offset
Note over Leader: 5. 更新提交點
Leader->>Leader: 6. 更新HighWatermark
end
sequenceDiagram
participant Client
participant Leader Controller
participant Follower Controllers
participant Brokers
Client->>Leader Controller: 1. 請求寫入
Leader Controller->>Leader Controller: 2. 寫入本地日誌
Leader Controller->>Follower Controllers: 3. 複製日誌
Follower Controllers-->>Leader Controller: 4. 確認複製
Leader Controller->>Brokers: 5. 更新中繼資料
Brokers-->>Leader Controller: 6. 確認更新
Leader Controller->>Client: 7. 回應完成
apache kraft 與 raft
https://shengshengyang.github.io/2024/12/30/kraft/