Consumer Group Partition Assignment
Consumer Group Partition Assignment
A log has partitions partitions numbered 0..partitions-1. A consumer group has a list of consumer IDs in a fixed order.
Assign partitions to consumers in round-robin order: partition p goes to consumer at index p % len(consumers).
Return the assignments, preserving the order of consumers.
If consumers is empty or partitions <= 0, return nil.
Types
type Assignment struct {
Consumer int
Partitions []int
}
Function signature
func AssignPartitions(consumers []int, partitions int) []Assignment
Example
consumers = [1,2,3]
partitions = 5
output = [
{Consumer:1, Partitions:[0,3]},
{Consumer:2, Partitions:[1,4]},
{Consumer:3, Partitions:[2]}
]
Exact rules
- Preserve input
consumersorder in returned assignments. - Partition
pis assigned toconsumers[p % len(consumers)]. - Every partition in
0..partitions-1must appear exactly once. - Consumers with no assigned partitions must still appear in output with an empty
Partitionsslice. - If
len(consumers) == 0orpartitions <= 0, returnnil.
Implementation recipe (near-answer)
- Handle empty-consumer/empty-partition fast path ->
nil. - Initialize one
Assignmentper consumer with emptyPartitions. - Loop
p := 0; p < partitions; p++:idx := p % len(consumers)- append
ptoassignments[idx].Partitions
- Return
assignments.
Complexity target
- Time:
O(partitions + len(consumers)) - Memory:
O(partitions + len(consumers))
Edge-case reminders
- More consumers than partitions is valid; some consumers get empty lists.
- Do not sort consumers; order is explicitly fixed by input.
Run tests to see results
No issues detected