java-topology/defects/kafka/patch/kafka-0001-sticky-assignor-current-assignment-hashset.patch

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. */