public abstract class CapacityGoal extends AbstractGoal
Goal.ClusterModelStatsComparator
_balancingConstraint, _finished, _minMonitoredPartitionPercentage, _numWindows, _succeeded
Constructor and Description |
---|
CapacityGoal()
Constructor for Capacity Goal.
|
Modifier and Type | Method and Description |
---|---|
ActionAcceptance |
actionAcceptance(BalancingAction action,
ClusterModel clusterModel)
Check whether the given action is acceptable by this goal.
|
protected java.util.SortedSet<Broker> |
brokersToBalance(ClusterModel clusterModel)
This is a hard goal; hence, the proposals are not limited to broken broker replicas in case of self-healing.
|
ModelCompletenessRequirements |
clusterModelCompletenessRequirements()
Specify the load requirements for this goal.
|
Goal.ClusterModelStatsComparator |
clusterModelStatsComparator()
Get an instance of
Goal.ClusterModelStatsComparator for this goal. |
void |
finish()
Signal for finishing the process for rebalance or self-healing for this goal.
|
protected void |
initGoalState(ClusterModel clusterModel,
OptimizationOptions optimizationOptions)
Sanity checks: Existing total load on cluster is less than the limiting capacity
determined by the total capacity of alive cluster multiplied by the capacity threshold.
|
boolean |
isHardGoal()
True if this is a hard goal, false otherwise.
|
abstract java.lang.String |
name()
Get the name of this goal.
|
protected void |
rebalanceForBroker(Broker broker,
ClusterModel clusterModel,
java.util.Set<Goal> optimizedGoals,
OptimizationOptions optimizationOptions)
(1) REBALANCE BY LEADERSHIP MOVEMENT:
Perform leadership movement to ensure that the load on brokers and/or hosts (see
Resource.isHostResource()
and Resource.isBrokerResource() ) for the outbound network load and CPU is under the capacity limit. |
protected abstract Resource |
resource() |
protected boolean |
selfSatisfied(ClusterModel clusterModel,
BalancingAction action)
This is a hard goal; hence, the proposals are not limited to broken broker replicas in case of self-healing.
|
protected void |
updateGoalState(ClusterModel clusterModel,
java.util.Set<java.lang.String> excludedTopics)
Update goal state.
|
configure, maybeApplyBalancingAction, maybeMoveReplicaBetweenDisks, optimize, shouldExclude, toString
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
canChangeReplicationFactor
public boolean isHardGoal()
Goal
protected abstract Resource resource()
public ActionAcceptance actionAcceptance(BalancingAction action, ClusterModel clusterModel)
DiskCapacityGoal.actionAcceptance(BalancingAction, ClusterModel)
and
NetworkInboundCapacityGoal.actionAcceptance(BalancingAction, ClusterModel)
).
(1) Check if leadership NW_OUT movement is acceptable: NW_OUT movement carries all of leader's NW_OUT load.
(2) Check if leadership CPU movement is acceptable: In reality, CPU movement carries only a fraction of
leader's CPU load.
To optimize CC performance, we avoid calculation of the expected leadership CPU utilization, and assume that
if (action.balancingAction() == ActionType.LEADERSHIP_MOVEMENT && resource() == Resource.CPU),
then the expected leadership CPU utilization would be the full CPU utilization of the leader.
## Replica Movement: impacts any resource. ## Replica Swap: impacts any resource.
action
- Action to be checked for acceptance.clusterModel
- The state of the cluster.ActionAcceptance.ACCEPT
if the action is acceptable by this goal,
ActionAcceptance.REPLICA_REJECT
otherwise.public Goal.ClusterModelStatsComparator clusterModelStatsComparator()
Goal
Goal.ClusterModelStatsComparator
for this goal.
The Goal.ClusterModelStatsComparator.compare(ClusterModelStats, ClusterModelStats)
method should give a
preference between two ClusterModelStats
.
Cruise Control will not reuse the returned instance.
The returned value must not be null.public ModelCompletenessRequirements clusterModelCompletenessRequirements()
Goal
public abstract java.lang.String name()
name
in interface Goal
name
in class AbstractGoal
protected boolean selfSatisfied(ClusterModel clusterModel, BalancingAction action)
selfSatisfied
in class AbstractGoal
clusterModel
- The state of the cluster.action
- Action containing information about potential modification to the given cluster model.protected java.util.SortedSet<Broker> brokersToBalance(ClusterModel clusterModel)
brokersToBalance
in class AbstractGoal
clusterModel
- The state of the cluster.protected void initGoalState(ClusterModel clusterModel, OptimizationOptions optimizationOptions) throws OptimizationFailureException
initGoalState
in class AbstractGoal
clusterModel
- The state of the cluster.optimizationOptions
- Options to take into account during optimization.OptimizationFailureException
protected void updateGoalState(ClusterModel clusterModel, java.util.Set<java.lang.String> excludedTopics) throws OptimizationFailureException
updateGoalState
in class AbstractGoal
clusterModel
- The state of the cluster.excludedTopics
- The topics that should be excluded from the optimization action.OptimizationFailureException
public void finish()
Goal
protected void rebalanceForBroker(Broker broker, ClusterModel clusterModel, java.util.Set<Goal> optimizedGoals, OptimizationOptions optimizationOptions) throws OptimizationFailureException
Resource.isHostResource()
and Resource.isBrokerResource()
) for the outbound network load and CPU is under the capacity limit.
(2) REBALANCE BY REPLICA MOVEMENT:
Perform optimization via replica movement for the given resource to ensure rebalance: The load on brokers and/or
hosts (see Resource.isHostResource()
and Resource.isBrokerResource()
) for the given resource is
under the capacity limit.
rebalanceForBroker
in class AbstractGoal
broker
- Broker to be balanced.clusterModel
- The state of the cluster.optimizedGoals
- Optimized goals.optimizationOptions
- Options to take into account during optimization -- e.g. excluded topics.OptimizationFailureException