4.1 Partition Leadership
Module Overview
Goal: Define partition leadership responsibilities and client routing behavior.
What You'll Learn:
- Leader duties and responsibilities
- Follower duties
- Client routing to leaders
- Leadership metadata
- Preferred leader concept
- Read-from-follower (optional feature)
What's NOT Covered Here:
- Leader election algorithms (covered in Module 4.2)
- Failover scenarios (covered in Module 4.3)
- Controller mechanics (covered in Module 6.1)
Key Insight: Partition leadership is Kafka's mechanism for coordinating writes and ensuring consistency. Understanding leader responsibilities is key to understanding Kafka's performance and durability characteristics.
1. Leader Responsibilities
Core Duties
PARTITION LEADER MUST:
1. Accept client writes
└─ Only leader can append to log (assign offsets)
2. Serve client reads (default)
└─ Consumers fetch from leader
3. Coordinate replication
├─ Accept follower fetch requests
├─ Track follower LEOs
└─ Manage ISR membership
4. Advance High Watermark
└─ Calculate HW from ISR member LEOs
5. Report to controller
├─ ISR changes (AlterPartitionRequest)
└─ Partition health metrics
Leader-Only Operations
OPERATIONS ONLY LEADER CAN PERFORM:
Write operations:
├─ Assign offsets to new records
├─ Append records to log
├─ Validate producer requests
└─ Respond with acknowledgments
Coordination:
├─ Track ISR membership
├─ Advance HW
├─ Handle fetch requests (from consumers and followers)
└─ Manage producer epochs (for idempotence/transactions)
Read operations (default):
└─ Serve consumer fetch requests
└─ (Followers can also serve with KIP-392)
2. Follower Responsibilities
Core Duties
PARTITION FOLLOWER MUST:
1. Replicate from leader
└─ Continuous fetch loop
2. Maintain exact log copy
└─ Same offsets, same data as leader
3. Stand by for leadership
└─ Can become leader if current leader fails
4. Report readiness
└─ Fetch frequency determines ISR membership
Optional (KIP-392):
└─ Serve client reads (if configured)
Follower Restrictions
FOLLOWERS CANNOT:
✗ Accept producer writes
└─ Producers must write to leader
✗ Assign offsets
└─ Only leader assigns offsets
✗ Modify ISR
└─ Only leader manages ISR
✗ Coordinate replication
└─ Followers are passive (just replicate)
✗ Serve consumer reads (default)
└─ Consumers read from leader
└─ (Can be enabled with rack-aware consumer fetching)
3. Client Routing to Leaders
Metadata Discovery
HOW CLIENTS FIND LEADERS:
1. Client connects to any broker (bootstrap server)
└─ MetadataRequest
2. Broker responds with cluster metadata:
├─ All brokers: [(id=1, host=broker1, port=9092), ...]
├─ All topics and partitions
└─ Leader for each partition: (topic=orders, partition=0, leader=1)
3. Client caches metadata locally
└─ Knows which broker is leader for each partition
4. Client sends requests directly to leader
└─ ProduceRequest → Leader broker
└─ FetchRequest → Leader broker (or follower if KIP-392)
5. Metadata refresh on errors
└─ NOT_LEADER_FOR_PARTITION → Refresh metadata
Metadata Refresh Triggers
CLIENTS REFRESH METADATA WHEN:
1. NOT_LEADER_FOR_PARTITION error
└─ Leader changed, client's metadata stale
2. UNKNOWN_TOPIC_OR_PARTITION error
└─ Topic created/deleted
3. Periodic refresh
└─ metadata.max.age.ms (default: 5 minutes)
4. Topic list change
└─ Subscribe to new topics
5. Broker connection failure
└─ Broker down, need to find new leader
Process:
├─ Send MetadataRequest
├─ Receive updated metadata
├─ Update local cache
└─ Retry operation with correct leader
4. Leadership Metadata
Metadata Structure
PARTITION METADATA:
Partition: orders-0
├─ Leader: Broker 1
├─ Replicas: [1, 2, 3]
├─ ISR: [1, 2]
├─ Offline replicas: [3]
└─ Leader epoch: 5
Client receives:
├─ Leader ID → Connect to Broker 1
├─ Replicas → Awareness of replication factor
└─ ISR → (Optional) Client-side durability check
5. Preferred Leader
Concept
PREFERRED LEADER:
Definition:
└─ First replica in replica list is "preferred leader"
Example:
├─ Replicas: [1, 2, 3]
└─ Preferred leader: Broker 1
Purpose:
└─ Balance leadership across brokers
└─ Avoid leadership concentration on few brokers
Preferred Leader Election
AUTOMATIC REBALANCING:
Configuration:
├─ auto.leader.rebalance.enable = true (default)
├─ leader.imbalance.per.broker.percentage = 10 (default)
└─ leader.imbalance.check.interval.ms = 300000 (5 minutes)
Behavior:
1. Controller periodically checks leadership balance
2. If broker has > 10% leadership imbalance:
├─ Controller triggers preferred leader elections
└─ Move leadership to preferred leaders
3. Result: Leadership distributed evenly
Example:
├─ Broker 1: 50 partitions as leader (should be 30)
├─ Imbalance: (50-30)/30 = 66% (> 10% threshold)
└─ Controller elects preferred leaders to rebalance
6. Leader Epoch in Leadership
Epoch Increment
EACH LEADER CHANGE INCREMENTS EPOCH:
Initial:
├─ Leader: Broker 1
└─ Epoch: 0
Broker 1 fails:
├─ New leader: Broker 2
├─ Epoch: 1
└─ Epoch incremented
Broker 1 returns as leader (preferred leader election):
├─ Leader: Broker 1
├─ Epoch: 2
└─ Epoch incremented again
Purpose:
└─ Detect stale leaders
└─ Enable divergence detection (as covered in Module 3.3)
7. Leadership and Performance
Why Leaders Matter for Performance
LEADER AS BOTTLENECK:
All writes for partition go through leader:
├─ Leader handles ProduceRequests
├─ Leader appends to log
├─ Leader coordinates replication
└─ Leader serves FetchRequests
Implications:
Skewed leadership:
├─ Few brokers handle most partitions
├─ Hot brokers (CPU, disk, network saturated)
└─ Reduced cluster throughput
Balanced leadership:
├─ Even load distribution
├─ All brokers utilized
└─ Maximum cluster throughput
Leadership Distribution
BEST PRACTICES:
1. Use preferred leader election
└─ auto.leader.rebalance.enable = true
2. Design topic replication carefully
├─ Partition count = multiple of broker count
└─ Even leadership distribution
3. Monitor leadership per broker
└─ Alert if imbalance detected
4. Manual reassignment if needed
└─ kafka-reassign-partitions.sh
└─ Rebalance leadership manually
Goal:
└─ Each broker leads ~equal number of partitions
8. Read-From-Follower (KIP-392)
Optional Feature
RACK-AWARE CONSUMER FETCHING:
Traditional (default):
└─ Consumers read from leader
KIP-392 (optional):
└─ Consumers can read from nearest follower
└─ Based on rack awareness
Benefits:
├─ Reduced cross-rack network traffic
├─ Lower latency (geographically closer)
└─ Better bandwidth utilization
Trade-offs:
├─ Slightly stale reads (follower HW may lag)
├─ More complex routing logic
└─ Only useful in multi-rack/multi-AZ deployments
How It Works
CONSUMER READS FROM FOLLOWER:
1. Consumer configured with:
└─ client.rack = "us-east-1a"
2. Broker provides metadata:
├─ Leader: Broker 1 (rack: us-east-1b)
├─ Followers: Broker 2 (rack: us-east-1a), Broker 3 (us-east-1c)
└─ Preferred read replica: Broker 2 (same rack as consumer)
3. Consumer sends FetchRequest to Broker 2 (follower)
4. Follower serves read from local log
└─ Up to follower's HW (may be slightly behind leader's HW)
Result:
└─ Reduced cross-AZ traffic
└─ Acceptable for latency-tolerant consumers
9. Key Takeaways
You've learned:
✅ Leaders accept writes and coordinate replication — followers replicate
✅ Only leaders assign offsets — single source of truth
✅ Clients route to leaders via metadata discovery
✅ Preferred leader = first replica in replica list
✅ Preferred leader election balances leadership across brokers
✅ Leader epochs increment on each leadership change
✅ Leadership distribution impacts performance — avoid hot brokers
✅ Read-from-follower (KIP-392) reduces cross-rack traffic (optional)
✅ Metadata refresh triggered by errors or timeouts
✅ Balanced leadership = higher cluster throughput
Summary
Partition leadership defines Kafka's coordination model:
Leader Duties =
├─ Accept writes (assign offsets)
├─ Coordinate replication (track ISR)
├─ Advance High Watermark
├─ Serve reads (default)
└─ Report to controller
Follower Duties =
├─ Replicate from leader
├─ Stand by for leadership
└─ Optionally serve reads (KIP-392)
Client Routing =
├─ Metadata discovery (which broker is leader)
├─ Direct connection to leader
├─ Refresh on errors
└─ Periodic metadata updates
Leadership Balance =
├─ Preferred leader = first in replica list
├─ auto.leader.rebalance.enable (automatic rebalancing)
└─ Even distribution = better performance
Remember: Leadership is Kafka's mechanism for coordinating writes and ensuring consistency. Balanced leadership is critical for performance. Understanding leader responsibilities explains Kafka's behavior during normal operations and failures.
Next up: Module 4.2 — Leader Election Algorithms — How Kafka chooses leaders.