Consumer Group Partition Assignment

easy · distributed-systems, streaming, partitioning

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 consumers order in returned assignments.
  • Partition p is assigned to consumers[p % len(consumers)].
  • Every partition in 0..partitions-1 must appear exactly once.
  • Consumers with no assigned partitions must still appear in output with an empty Partitions slice.
  • If len(consumers) == 0 or partitions <= 0, return nil.

Implementation recipe (near-answer)

  1. Handle empty-consumer/empty-partition fast path -> nil.
  2. Initialize one Assignment per consumer with empty Partitions.
  3. Loop p := 0; p < partitions; p++:
    • idx := p % len(consumers)
    • append p to assignments[idx].Partitions
  4. 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
    Join Discord