KRaft Consensus
Raft-based consensus for ZooKeeper-free operation.
Overview
KRaft (Kafka Raft) provides:
- No ZooKeeper dependency
- Metadata stored in Surgewave topics
- Faster controller failover
- Simpler operations
Configuration
{
"Surgewave": {
"UseRaftConsensus": true,
"RaftDataDirectory": "./raft",
"RaftElectionTimeoutMinMs": 150,
"RaftElectionTimeoutMaxMs": 300,
"RaftHeartbeatIntervalMs": 50
}
}
How It Works
flowchart TB
subgraph Raft["Raft Cluster"]
L["Leader (Voter)<br/>handles all writes"]
F1["Follower (Voter)"]
F2["Follower (Voter)"]
L -->|AppendEntries| F1
L -->|AppendEntries| F2
end
APIs
| API | Key | Description |
|---|---|---|
| Vote | 52 | Leader election voting |
| BeginQuorumEpoch | 53 | Start new leader term |
| EndQuorumEpoch | 54 | End leader term |
| DescribeQuorum | 55 | Query quorum state |
| FetchSnapshot | 59 | Fetch metadata snapshot |
Leader Election
- Election Timeout - Follower becomes candidate
- Request Votes - Candidate requests votes
- Majority Wins - First to majority becomes leader
- Heartbeats - Leader sends periodic heartbeats
Term 1: Broker1 is leader
↓ (Broker1 fails)
Term 2: Broker2 wins election
↓ (Broker1 returns as follower)
Broker Registration
Brokers register with controller:
1. BrokerRegistration (API 62)
- BrokerId, Rack, Endpoints
2. BrokerHeartbeat (API 63)
- Periodic liveness signal
3. Controller updates metadata
Configuration Options
| Setting | Default | Description |
|---|---|---|
RaftElectionTimeoutMinMs |
150 | Min election timeout |
RaftElectionTimeoutMaxMs |
300 | Max election timeout |
RaftHeartbeatIntervalMs |
50 | Heartbeat interval |
RaftDataDirectory |
./raft | Raft log storage |
Raft Log
Raft log persisted to disk:
raft/
├── log/
│ ├── 00000000000000000000.log
│ └── 00000000000000001000.log
├── snapshots/
│ └── snapshot-1000.dat
└── metadata.json
Quorum Operations
# View quorum state
surgewave cluster status
# Output:
# Cluster ID: surgewave-cluster
# Controller: Broker 1
# Quorum:
# Leader: 1 (epoch: 5)
# Voters: [1, 2, 3]
# Observers: []
Failure Scenarios
Leader Failure
- Followers detect missing heartbeats
- Election timeout triggers
- New leader elected (majority quorum)
- Clients redirect to new leader
Network Partition
[Broker1] | [Broker2, Broker3]
|
Minority │ Majority
(steps down) (elects new leader)
Minority partition cannot elect leader (no quorum).
Exponential Backoff
RPC retries use exponential backoff:
Attempt 1: 100ms
Attempt 2: 200ms
Attempt 3: 400ms
...
Max: 5000ms
Monitoring
| Metric | Description |
|---|---|
surgewave_raft_term |
Current raft term |
surgewave_raft_leader |
Current leader ID |
surgewave_raft_elections_total |
Election count |
surgewave_raft_log_end_offset |
Log end offset |
Best Practices
- Odd number of voters - 3 or 5 for clean majority
- Low latency network - Election timeouts depend on RTT
- Persistent storage - SSDs for raft log
- Monitor elections - Frequent elections indicate issues
Next Steps
- Failover - Failure handling
- Replication - Data replication