18 lines
1.2 KiB
Diff
18 lines
1.2 KiB
Diff
# UNDF: UNDF-2026-000000131
|
|
--- a/clients/src/main/java/org/apache/kafka/clients/consumer/internals/AbstractStickyAssignor.java
|
|
+++ b/clients/src/main/java/org/apache/kafka/clients/consumer/internals/AbstractStickyAssignor.java
|
|
@@ -540,1 +540,2 @@ final Map<String, List<TopicPartition>> currentAssignment;
|
|
+final Map<String, Set<TopicPartition>> currentAssignmentSet; /* O(1) .contains(); was O(P/C) ArrayList */
|
|
|
|
@@ -985,1 +985,2 @@ currentAssignment.put(consumerId, new ArrayList<>());
|
|
+currentAssignmentSet.put(consumerId, new HashSet<>());
|
|
|
|
@@ -1207,3 +1207,3 @@ if (!currentAssignment.get(consumer).contains(topicPartition)) {
|
|
- if (!currentAssignment.get(consumer).contains(topicPartition)) {
|
|
+ if (!currentAssignmentSet.get(consumer).contains(topicPartition)) { /* O(1); was O(P/C) */
|
|
String otherConsumer = allPartitions.get(topicPartition);
|
|
|
|
/* Also update currentAssignmentSet whenever currentAssignment is modified:
|
|
* currentAssignmentSet.get(consumer).add(tp) / remove(tp) alongside every
|
|
* currentAssignment.get(consumer).add(tp) / remove(tp) call.
|
|
* Reduces isBalanced() from O(P³/C) to O(P²/C) per rebalance. */
|