8.2. 优化目标概述

要重新平衡 Kafka 集群,Cruise Control 使用优化目标来生成 优化方法, 您可以批准或拒绝这些优化。

优化目标是针对 Kafka 集群内工作负载重新分配和资源利用率的限制。AMQ Streams 支持在 Cruise Control 项目中开发的大多数优化目标。支持的目标(按默认降序排列)如下:

  1. 机架感知
  2. 副本容量
  3. capacity :磁盘容量、网络入站容量、网络出站容量、CPU 容量
  4. 副本发布
  5. 潜在的网络输出
  6. 资源分配 :磁盘利用率分布、网络入站利用率分布、网络出站利用率分布、CPU 利用率分布

    注意

    资源分配目标使用代理 资源的能力限制 来控制。

  7. 领导字节速率分布
  8. 主题副本发布
  9. 领导程序副本发布
  10. 首选领导选举机制

有关每个优化目标的更多信息,请参阅 Cruise Control Wiki 中的目标。

注意

尚不支持broker 磁盘目标、"写入您自己的"目标和 Kafka 分配程序目标。

AMQ Streams 自定义资源中的目标配置

您可以在 Kafka 和 Kafka Rebalance 自定义资源中配置优化目标。整合控制具有必须要满足 的硬 优化目标配置,以及 服务器、默认 和用户提供的 优化目标。资源分布(磁盘、网络入站、网络出站和 CPU)的优化目标受到代理资源 的容量限制

以下小节更详细地描述了每个目标配置。

硬目标和软目标

硬目标就是在优化调整时 必须满足 的目标。未配置为硬目标的目标称为 软目标。您可以将软目标视为 最佳工作 目标:它们在优化调整 时不 需要满足,而是包含在优化计算中。违反一个或多个软目标但满足所有硬目标的最佳建议是有效的。

粗体控件将计算出符合所有硬目标和尽可能多的软目标(按优先顺序)的优化条件。无法 满足所有硬目标的优化建议被拒绝,不会发送给用户进行审批。

注意

例如,您可能有一个软目标来在集群中平均分发主题的副本(主题副本分发目标)。如果这样做能够实现所有配置的硬目标,挑战控制将忽略此目标。

在 Cruise Control 中,以下 主优化目标是 预先设定为硬目标:

RackAwareGoal; ReplicaCapacityGoal; DiskCapacityGoal; NetworkInboundCapacityGoal; NetworkOutboundCapacityGoal; CpuCapacityGoal

您可以通过编辑 Kafka.spec.cruiseControl.config 中的 hard.goals 属性,在 Cruise Control 部署配置中配置硬目标。

  • 要从 Cruise Control 继承预先设置的硬链接,请不要在 Kafka.spec.cruiseControl.config 中指定 hard. goals属性
  • 要改变预先设定的硬目标,请使用其完全限定域名在 hard.goals 属性中指定预期的目标。

硬优化目标的 Kafka 配置示例

apiVersion: kafka.strimzi.io/v1beta1
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    # ...
  zookeeper:
    # ...
  entityOperator:
    topicOperator: {}
    userOperator: {}
  cruiseControl:
    brokerCapacity:
      inboundNetwork: 10000KB/s
      outboundNetwork: 10000KB/s
    config:
      hard.goals: >
        com.linkedin.kafka.cruisecontrol.analyzer.goals.NetworkInboundCapacityGoal,
        com.linkedin.kafka.cruisecontrol.analyzer.goals.NetworkOutboundCapacityGoal
      # ...

增加配置的硬目标数量将降低 Cruise 控制产生有效优化判断的可能性。

如果在 KafkaRebalance 自定义资源中指定了 skipHardGoalCheck: true,Cruise Control 不会 检查用户提供的优化目标(在 KafkaRebalance.spec.goals 中)是否包含 所有 配置的硬目标(hard.goals)。因此,如果一些(但不是全部)用户提供的优化目标在 hard.goals 列表中,即使指定了 skipHardGoalCheck: true,Cruise Control 仍会将它们视为硬目标

主优化目标

主优化目标 适用于所有用户。主优化目标中没有列出的目标不适用于 Cruise 控制操作。

除非更改了 Cruise Control 部署配置,A MQ Streams 将从 Cruise Control 中继承以下 master 优化目标,以降序为优先级:

RackAwareGoal; ReplicaCapacityGoal; DiskCapacityGoal; NetworkInboundCapacityGoal; NetworkOutboundCapacityGoal; CpuCapacityGoal; ReplicaDistributionGoal; PotentialNwOutGoal; DiskUsageDistributionGoal; NetworkInboundUsageDistributionGoal; NetworkOutboundUsageDistributionGoal; CpuUsageDistributionGoal; TopicReplicaDistributionGoal; LeaderReplicaDistributionGoal; LeaderBytesInDistributionGoal; PreferredLeaderElectionGoal

其中六个目标被预先设定为 困难的目标

为降低复杂性,建议您使用继承的主优化目标,除非您需要 完全排除KafkaRebalance 资源中使用的一个或多个目标。如果需要,可以在配置 默认优化目标时修改主优化目标 的优先级顺序。

您可以在 Cruise Control 部署配置中配置主优化目标:Kafka.spec.cruiseControl.config.goals

  • 要接受继承的主优化目标,请不要在 Kafka.spec.cruiseControl.config 中指定 target 属性
  • 如果您需要修改继承的主优化目标,请在 目标 配置选项中以降序排列为目标列表。
注意

如果更改了继承的主优化目标,您必须确保硬目标(如果在 Kafka.spec.cruiseControl.config 中的 hard. goals 属性中配置)是您配置的主优化目标的子集。否则,生成优化时会出现错误。

默认优化目标

精简控制 使用默认优化目标 来生成 缓存优化建议。有关缓存优化建议的详情请参考 第 8.3 节 “优化调整概述”

您可以通过在 KafkaRebalance 自定义资源中设置 用户提供的优化目标 来覆盖默认优化目标。

除非在 Cruise Control 部署配置 中指定了 default.goals,否则主优化目标将用作默认的优化目标。在这种情况下,缓存的优化建议是使用主优化目标生成的。

  • 要将主优化目标用作默认目标,请不要在 Kafka.spec.cruiseControl.config 中指定 default. goals 属性。
  • 要修改默认优化目标,请编辑 Kafka.spec.cruiseControl.config 中的 default. goals 属性。您必须使用主优化目标的子集。

默认优化目标的 Kafka 配置示例

apiVersion: kafka.strimzi.io/v1beta1
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    # ...
  zookeeper:
    # ...
  entityOperator:
    topicOperator: {}
    userOperator: {}
  cruiseControl:
    brokerCapacity:
      inboundNetwork: 10000KB/s
      outboundNetwork: 10000KB/s
    config:
      default.goals: >
         com.linkedin.kafka.cruisecontrol.analyzer.goals.RackAwareGoal,
         com.linkedin.kafka.cruisecontrol.analyzer.goals.ReplicaCapacityGoal,
         com.linkedin.kafka.cruisecontrol.analyzer.goals.DiskCapacityGoal
      # ...

如果没有指定默认优化目标,则使用主优化目标生成缓存建议。

用户提供的优化目标

用户提供的优化目标 缩小了针对特定优化建议配置的默认目标。您可以根据需要在 KafkaRebalance 自定义资源中的 spec.goals 中设置它们:

KafkaRebalance.spec.goals

用户提供的优化目标可针对不同的情景生成优化。例如,您可能想要在 Kafka 集群间优化领导副本分布,而不考虑磁盘容量或磁盘使用率。因此,您可以创建一个 KafkaRebalance 自定义资源,其中包含领导副本分发的用户提供的目标。

用户提供的优化目标必须:

  • 包括所有配置 的硬目标 或发生错误
  • 成为主优化目标的子集

要在生成优化建议时忽略配置的硬目标,请将 skipHardGoalCheck: true 属性添加到 KafkaRebalance 自定义资源。请参阅 第 8.7 节 “生成优化分析”

其他资源