Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove broker weights for ModularLoadManager #442

Merged
merged 27 commits into from
Jun 1, 2017

Conversation

bradtm
Copy link
Contributor

@bradtm bradtm commented May 31, 2017

Motivation

When an overloaded broker is restarted, all the bundles hosted by that broker typically get assigned right back to the same broker by the newer ModularLoadManagerImpl. The default (and only) strategy for this load manager is LeastLongTermMessageRate, which uses the combined long-term message rates (in+out), multiplied by the weight of the broker.

The problem is the broker weight is determined by the inverse of how much headroom the broker has. More specifically, it's the inverse of (overload_threshold - max_usage). In our production environment, we have noticed this weight varies from 3.2 to +Infinity (which happens when the broker is at or above the overload threshold). As a result, the load manager will assign bundles to the newly restarted broker until it has roughly triple the message rate of the least loaded broker. I.e., it will assign all the bundles that were unloaded right back to itself.

Modifications

The weights were removed so the modular load manager places bundles based purely on the long-term message rates. It is expected that many (but not all) bundles will get assigned to a broker which was restarted. In the future, we would like to have static weights for each broker (with a default).

Result

No change if the older SimpleLoadManager is being used (which is the default). For deployments configured with the newer ModularLoadManager, load should be more evenly distributed based on long-term message rates.

Brad McMillen and others added 26 commits May 5, 2017 12:33
brokerData.getLocalData().getWebServiceUrl(), totalMessageRateEstimate, weight, score);
return score;

log.debug("Broker {} has long term message rate {}",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

typically we wrap all the debug statements within a if (log.isDebugEnabled()) {....} to avoid any parameters boxing or Object[] vargs allocations.

@merlimat merlimat added this to the 1.18 milestone Jun 1, 2017
@merlimat merlimat added the type/bug The PR fixed a bug or issue reported a bug label Jun 1, 2017
Copy link
Contributor

@merlimat merlimat left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

@merlimat merlimat merged commit 5a82c79 into apache:master Jun 1, 2017
@bradtm bradtm deleted the remove-weights branch June 1, 2017 18:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type/bug The PR fixed a bug or issue reported a bug
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants