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/
作者
Dean Yang
發布於
2024年12月30日
許可協議