Gavin Wang created KAFKA-21194:
----------------------------------

             Summary: Speed up the balanced task assignor and register it as a 
built-in assignor
                 Key: KAFKA-21194
                 URL: https://issues.apache.org/jira/browse/KAFKA-21194
             Project: Kafka
          Issue Type: Sub-task
          Components: streams
    Affects Versions: 4.5.0
            Reporter: Gavin Wang
            Assignee: Gavin Wang


KAFKA-20998 added \{{BalancedTaskAssignor}}, a one-to-one translation of the 
classic \{{HighAvailabilityTaskAssignor}} placement, not yet registered as a 
built-in. Its fix-up loop tests every pair of processes on each pass, so it 
costs Θ(P²) per pass even when nothing moves: up to 26x the sticky assignor's 
time in JMH (12.4 ms for 1000 single-member processes).

Plan:
# Index-based implementation and an O(P) early exit for passes that cannot move 
a task. Same assignment.
# Place active tasks with the Sainte-Laguë divisor method (next task to the 
process with the smallest (2n+1)/c), read from a precomputed period, instead of 
round-robin plus fix-up. Same placement for equal member counts; for unequal 
ones the same per-member balance and a more even spread of each subtopology. 
Separate PR, as it changes placement.
# Register \{{balanced}} in 
\{{GroupCoordinatorConfig.STREAMS_GROUP_BUILTIN_ASSIGNORS}} once KIP-1071 is 
amended from \{{highly_available}}.

Prototypes: 1 is 6-10x faster, 1+2 is 12-19x, about a quarter of the sticky 
assignor's time.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to