[ https://issues.apache.org/jira/browse/KAFKA-9987?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17108741#comment-17108741 ]
Travis Bischel commented on KAFKA-9987: --------------------------------------- Benchmark setup / code here: https://github.com/twmb/kafka-go/blob/3182a1fbce567ef8fbd95220027ce999a866557d/pkg/kgo/internal/sticky/sticky_test.go#L1237-L1291 Looks like (had to stare at this a bit) I setup a ton of topics, one per member, then I give each topic a random amount of partitions. For "WithExisting" benchmarks (prior plan), I encode the result of planning the initial setup, and then over each member, I give them what was just planned. So basically, all members are joining with the prior plan, and the new plan should be exactly the same. It's a bit weird, but all the work still needs to be done. You could enforce a difference by removing one member though, if you want. The setup could maybe be a bit better w.r.t. number of topics, but from the code perspective, the number of topics doesn't matter, only the number of partitions. > Improve sticky partition assignor algorithm > ------------------------------------------- > > Key: KAFKA-9987 > URL: https://issues.apache.org/jira/browse/KAFKA-9987 > Project: Kafka > Issue Type: Improvement > Components: clients > Reporter: Sophie Blee-Goldman > Assignee: Sophie Blee-Goldman > Priority: Major > > In > [KIP-429|https://cwiki.apache.org/confluence/display/KAFKA/KIP-429%3A+Kafka+Consumer+Incremental+Rebalance+Protocol] > we added the new CooperativeStickyAssignor which leverages on the underlying > sticky assignment algorithm of the existing StickyAssignor (moved to > AbstractStickyAssignor). The algorithm is fairly complex as it tries to > optimize stickiness while satisfying perfect balance _in the case individual > consumers may be subscribed to different subsets of the topics._ While it > does a pretty good job at what it promises to do, it doesn't scale well with > large numbers of consumers and partitions. > To give a concrete example, users have reported that it takes 2.5 minutes for > the assignment to complete with just 2100 consumers reading from 2100 > partitions. Since partitions revoked during the first of two cooperative > rebalances will remain unassigned until the end of the second rebalance, it's > important for the rebalance to be as fast as possible. And since one of the > primary improvements of the cooperative rebalancing protocol is better > scaling experience, the only OOTB cooperative assignor should not itself > scale poorly > If we can constrain the problem a bit, we can simplify the algorithm greatly. > In many cases the individual consumers won't be subscribed to some random > subset of the total subscription, they will all be subscribed to the same set > of topics and rely on the assignor to balance the partition workload. > We can detect this case by checking the group's individual subscriptions and > call on a more efficient assignment algorithm. -- This message was sent by Atlassian Jira (v8.3.4#803005)