lkokhreidze commented on pull request #10851:
URL: https://github.com/apache/kafka/pull/10851#issuecomment-905514160


   The general thought on the implementation. 
   As of now, we choose concrete `StandbyTaskAssignor` implementation based on 
passed `AssignmentConfigs` value.
   Instead, an alternative approach would be to have a chained standby task 
assignment based on multiple implementations. For instance, when have required 
client tag configuration is present, we can try to assign the standby tasks 
based on `List.of(new ClientTagAwareStandbyTaskAssignor(), new 
DefaultStandbyTaskAssignor())`. This way, `ClientTagAwareStandbyTaskAssignor` 
can try to distribute the standby tasks based on tags dimensions. If there are 
no more client tag dimensions available, and we still have 
`any(tasksToRemainingStandbys) > 0`, the next implementation in the chain (in 
this case `DefaultStandbyTaskAssignor`) will be called. With this, 
`DefaultStandbyTaskAssignor` can default to assigning the remaining standbys to 
the least loaded clients. The benefit of this approach is that, right now, 
`ClientTagAwareStandbyTaskAssignor` does both assignments based on available 
dimensions and fallback to the least loaded if there are no enough tag 
dimensions. Current implementation leads
  to more complex code. While with the approach above, we can clearly separate 
the implementations without duplication (there's no code duplication, rather 
"logic" duplication).
   For now, I've chosen to go with the simplest approach - having two 
independent implementations and selecting an appropriate one based on passed 
`AssignmentConfigs.` Still, I wanted to share this idea here, just in case. 


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: jira-unsubscr...@kafka.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Reply via email to