Affects Version/s: 0.10.0.0, 0.11.0.0, 1.0.0
Fix Version/s: None
The RoundRobinAssignor loops over the consumers in a circular manner, assigning each time N partitions to each consumer, where N is the number of consuming threads.
In the following scenario, this creates a major imbalance in the assignment.
single topic with 64 partitions, 4 consumers (A,B,C,D), each with 12 threads. The roundrobin strategy will allocate the partitions in the following manner:
when the expected assignment would rather be 16 to each consumer.
The reason for this imbalance is that instead of allocating a single partition to each consumer in sequence, the assignor attempts to assign 12 partitions each time it is handed a consumer by the circularIterator, so it starts by assigning 12 to each of A,B,C and D, then it has 16 partitions left and it is handed A again, to which it assigns 12 partitions before moving to B to which 4 will be assigned.