Search in sources :

Example 1 with DISK

use of com.linkedin.kafka.cruisecontrol.common.Resource.DISK in project cruise-control by linkedin.

the class KafkaAssignerDiskUsageDistributionGoal method optimize.

@Override
public boolean optimize(ClusterModel clusterModel, Set<Goal> optimizedGoals, Set<String> excludedTopics) {
    double meanDiskUsage = clusterModel.load().expectedUtilizationFor(DISK) / clusterModel.capacityFor(DISK);
    double upperThreshold = meanDiskUsage * (1 + balancePercentageWithMargin());
    double lowerThreshold = meanDiskUsage * Math.max(0, (1 - balancePercentageWithMargin()));
    Comparator<Broker> comparator = (b1, b2) -> {
        int result = Double.compare(diskUsage(b2), diskUsage(b1));
        return result == 0 ? Integer.compare(b1.id(), b2.id()) : result;
    };
    boolean improved;
    int numIterations = 0;
    do {
        List<Broker> brokers = new ArrayList<>();
        brokers.addAll(clusterModel.healthyBrokers());
        brokers.sort(comparator);
        improved = false;
        LOG.debug("Starting iteration {}", numIterations);
        for (Broker broker : brokers) {
            if (checkAndOptimize(broker, clusterModel, meanDiskUsage, lowerThreshold, upperThreshold, excludedTopics)) {
                improved = true;
            }
        }
        numIterations++;
    } while (improved);
    boolean succeeded = isOptimized(clusterModel, upperThreshold, lowerThreshold);
    LOG.debug("Finished optimization in {} iterations.", numIterations);
    return succeeded;
}
Also used : Replica(com.linkedin.kafka.cruisecontrol.model.Replica) TopicPartition(org.apache.kafka.common.TopicPartition) Logger(org.slf4j.Logger) BalancingConstraint(com.linkedin.kafka.cruisecontrol.analyzer.BalancingConstraint) Collection(java.util.Collection) ClusterModel(com.linkedin.kafka.cruisecontrol.model.ClusterModel) LoggerFactory(org.slf4j.LoggerFactory) Set(java.util.Set) DISK(com.linkedin.kafka.cruisecontrol.common.Resource.DISK) ArrayList(java.util.ArrayList) Broker(com.linkedin.kafka.cruisecontrol.model.Broker) HashSet(java.util.HashSet) KafkaCruiseControlConfig(com.linkedin.kafka.cruisecontrol.config.KafkaCruiseControlConfig) Goal(com.linkedin.kafka.cruisecontrol.analyzer.goals.Goal) List(java.util.List) BalancingAction(com.linkedin.kafka.cruisecontrol.analyzer.BalancingAction) Resource(com.linkedin.kafka.cruisecontrol.common.Resource) ClusterModelStats(com.linkedin.kafka.cruisecontrol.model.ClusterModelStats) Map(java.util.Map) StringJoiner(java.util.StringJoiner) Comparator(java.util.Comparator) Collections(java.util.Collections) ActionAcceptance(com.linkedin.kafka.cruisecontrol.analyzer.ActionAcceptance) ModelCompletenessRequirements(com.linkedin.kafka.cruisecontrol.monitor.ModelCompletenessRequirements) Broker(com.linkedin.kafka.cruisecontrol.model.Broker) ArrayList(java.util.ArrayList) BalancingConstraint(com.linkedin.kafka.cruisecontrol.analyzer.BalancingConstraint)

Aggregations

ActionAcceptance (com.linkedin.kafka.cruisecontrol.analyzer.ActionAcceptance)1 BalancingAction (com.linkedin.kafka.cruisecontrol.analyzer.BalancingAction)1 BalancingConstraint (com.linkedin.kafka.cruisecontrol.analyzer.BalancingConstraint)1 Goal (com.linkedin.kafka.cruisecontrol.analyzer.goals.Goal)1 Resource (com.linkedin.kafka.cruisecontrol.common.Resource)1 DISK (com.linkedin.kafka.cruisecontrol.common.Resource.DISK)1 KafkaCruiseControlConfig (com.linkedin.kafka.cruisecontrol.config.KafkaCruiseControlConfig)1 Broker (com.linkedin.kafka.cruisecontrol.model.Broker)1 ClusterModel (com.linkedin.kafka.cruisecontrol.model.ClusterModel)1 ClusterModelStats (com.linkedin.kafka.cruisecontrol.model.ClusterModelStats)1 Replica (com.linkedin.kafka.cruisecontrol.model.Replica)1 ModelCompletenessRequirements (com.linkedin.kafka.cruisecontrol.monitor.ModelCompletenessRequirements)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 Collections (java.util.Collections)1 Comparator (java.util.Comparator)1 HashSet (java.util.HashSet)1 List (java.util.List)1 Map (java.util.Map)1 Set (java.util.Set)1