Class RangeAssignor
- java.lang.Object
-
- org.apache.kafka.clients.consumer.internals.AbstractPartitionAssignor
-
- org.apache.kafka.clients.consumer.RangeAssignor
-
- All Implemented Interfaces:
ConsumerPartitionAssignor
public class RangeAssignor extends org.apache.kafka.clients.consumer.internals.AbstractPartitionAssignor
The range assignor works on a per-topic basis. For each topic, we lay out the available partitions in numeric order and the consumers in lexicographic order. We then divide the number of partitions by the total number of consumers to determine the number of partitions to assign to each consumer. If it does not evenly divide, then the first few consumers will have one extra partition.
For example, suppose there are two consumers
C0
andC1
, two topicst0
andt1
, and each topic has 3 partitions, resulting in partitionst0p0
,t0p1
,t0p2
,t1p0
,t1p1
, andt1p2
.The assignment will be:
C0: [t0p0, t0p1, t1p0, t1p1]
C1: [t0p2, t1p2]
group.instance.id
to make the assignment behavior more sticky. For the above example, after one rolling bounce, group coordinator will attempt to assign newmember.id
towards consumers, for exampleC0
->C3
C1
->C2
.The assignment could be completely shuffled to:
C3 (was C0): [t0p2, t1p2] (before was [t0p0, t0p1, t1p0, t1p1])
C2 (was C1): [t0p0, t0p1, t1p0, t1p1] (before was [t0p2, t1p2])
member.id
relative order, and can be avoided by setting the group.instance.id. Consumers will have individual instance idsI1
,I2
. As long as 1. Number of members remain the same across generation 2. Static members' identities persist across generation 3. Subscription pattern doesn't change for any memberThe assignment will always be:
I0: [t0p0, t0p1, t1p0, t1p1]
I1: [t0p2, t1p2]
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.apache.kafka.clients.consumer.internals.AbstractPartitionAssignor
org.apache.kafka.clients.consumer.internals.AbstractPartitionAssignor.MemberInfo
-
Nested classes/interfaces inherited from interface org.apache.kafka.clients.consumer.ConsumerPartitionAssignor
ConsumerPartitionAssignor.Assignment, ConsumerPartitionAssignor.GroupAssignment, ConsumerPartitionAssignor.GroupSubscription, ConsumerPartitionAssignor.RebalanceProtocol, ConsumerPartitionAssignor.Subscription
-
-
Constructor Summary
Constructors Constructor Description RangeAssignor()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Map<String,List<TopicPartition>>
assign(Map<String,Integer> partitionsPerTopic, Map<String,ConsumerPartitionAssignor.Subscription> subscriptions)
String
name()
Unique name for this assignor (e.g.-
Methods inherited from class org.apache.kafka.clients.consumer.internals.AbstractPartitionAssignor
assign, partitions, put
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.kafka.clients.consumer.ConsumerPartitionAssignor
onAssignment, subscriptionUserData, supportedProtocols, version
-
-
-
-
Method Detail
-
name
public String name()
Description copied from interface:ConsumerPartitionAssignor
Unique name for this assignor (e.g. "range" or "roundrobin" or "sticky"). Note, this is not required to be the same as the class name specified inConsumerConfig.PARTITION_ASSIGNMENT_STRATEGY_CONFIG
- Returns:
- non-null unique name
-
assign
public Map<String,List<TopicPartition>> assign(Map<String,Integer> partitionsPerTopic, Map<String,ConsumerPartitionAssignor.Subscription> subscriptions)
- Specified by:
assign
in classorg.apache.kafka.clients.consumer.internals.AbstractPartitionAssignor
-
-