Managing Consumer Groups
1. Understanding Group Coordinator
| Concept | Description | Detail |
|---|---|---|
| Coordinator | Broker managing a group's membership & offsets | One per group |
| Selection | Hash of group.id → __consumer_offsets partition | Deterministic |
| Leader Member | One consumer computes assignment | Group leader |
Example: Find coordinator
kafka-consumer-groups.sh --describe --group billing \
--members --bootstrap-server localhost:9092
2. Understanding Rebalancing
| Trigger | Cause | Effect |
|---|---|---|
| Member Join/Leave | Scaling or crash | Reassign partitions |
| Topic Change | Partition added | New assignment |
| Stop-the-world | Eager protocol pauses all | Use cooperative |
Example: Rebalance listener
consumer.subscribe(List.of("orders"), new ConsumerRebalanceListener() {
public void onPartitionsRevoked(Collection<TopicPartition> p) { commit(); }
public void onPartitionsAssigned(Collection<TopicPartition> p) { /* init */ }
});
3. Listing Consumer Groups
| Flag | Purpose | Detail |
|---|---|---|
| --list | Show all group IDs | One per line |
| --state | Include group state | Stable/Empty |
| --all-groups | Apply to every group | Bulk ops |
4. Describing Consumer Groups
| Column | Meaning | Detail |
|---|---|---|
| CURRENT-OFFSET | Last committed offset | Per partition |
| LOG-END-OFFSET | Latest produced offset | Tip of log |
| LAG | END minus CURRENT | Backlog |
Example: Describe a group
kafka-consumer-groups.sh --describe --group billing \
--bootstrap-server localhost:9092
5. Viewing Consumer Lag
| Metric | Description | Detail |
|---|---|---|
| Partition Lag | END - committed per partition | Granular |
| Total Lag | Sum across partitions | Overall health |
| records-lag-max | JMX consumer metric | Live monitoring |
Example: Check lag
kafka-consumer-groups.sh --describe --group billing \
--bootstrap-server localhost:9092 | awk '{print $1,$3,$6}'
6. Resetting Offsets
| Option | Target | Detail |
|---|---|---|
| --to-earliest | Oldest offset | Full replay |
| --to-latest | Newest offset | Skip backlog |
| --shift-by | Relative move | +/- N |
| --dry-run | Preview only | Then --execute |
Warning: Offset reset requires the group to be inactive (no live members) or it will fail.
Example: Reset to earliest
kafka-consumer-groups.sh --reset-offsets --group billing \
--topic orders --to-earliest --execute \
--bootstrap-server localhost:9092
7. Deleting Consumer Groups
| Aspect | Description | Constraint |
|---|---|---|
| --delete | Remove group + offsets | Must be empty |
| Active Group | Cannot delete with members | Stop consumers |
| Effect | Re-consume per offset reset | State lost |
Example: Delete a group
kafka-consumer-groups.sh --delete --group old-group \
--bootstrap-server localhost:9092
8. Configuring Session Timeout
| Config | Scope | Default |
|---|---|---|
| session.timeout.ms | Consumer-side liveness | 45000 |
| group.min.session. timeout.ms |
Broker lower bound | 6000 |
| group.max.session. timeout.ms |
Broker upper bound | 1800000 |
9. Setting Heartbeat Interval
| Config | Description | Detail |
|---|---|---|
| heartbeat.interval.ms | Frequency to coordinator | 3000 |
| Ratio | 1/3 of session timeout | Guideline |
| Missed | Triggers eviction after session | Rebalance |
Example: Align heartbeat
props.put("session.timeout.ms", 30000);
props.put("heartbeat.interval.ms", 10000);
10. Configuring Max Poll Interval
| Config | Description | Detail |
|---|---|---|
| max.poll.interval.ms | Processing budget per batch | 300000 |
| Symptom | Repeated rebalances if exceeded | Tune work |
| Mitigation | Lower max.poll.records | Or offload |