11.2. 优化目标概述


优化目标对 Kafka 集群的工作负载重新分配和资源利用率的限制。要重新平衡 Kafka 集群,Cruise Control 使用 优化目标来生成优化提议,您可以批准或拒绝。

11.2.1. 优先级的目标顺序

AMQ Streams 支持在 Cruise Control 项目中开发的大多数优化目标。支持的目标(以默认降序排列)如下:

  1. rack-awareness
  2. 一组主题的每个代理的最小领导副本数
  3. 副本容量
  4. 容量目标

    • 磁盘容量
    • 网络入站容量
    • 网络出站容量
    • CPU 容量
  5. 副本分发
  6. 潜在的网络输出
  7. 资源分配目标

    • 磁盘使用率分布
    • 网络入站使用分布
    • 网络出站使用分布
    • CPU 使用率分布
  8. 领导字节速率分布
  9. 主题副本分发
  10. 领导副本分发
  11. 首选领导选举机制
  12. intra-broker 磁盘容量
  13. intra-broker 磁盘用量分布

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

注意

尚不支持"写您自己的目标"目标和 Kafka 分配目标。

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

您可以在 KafkaKafkaRebalance 自定义资源中配置优化目标。Cruise Control 具有必须满足的硬优化目标的配置,以及主要、默认和用户提供的优化目标。

您可以在以下配置中指定优化目标:

  • Main goals — Kafka.spec.cruiseControl.config.goals
  • Hard goals — Kafka.spec.cruiseControl.config.hard.goals
  • Default goals — Kafka.spec.cruiseControl.config.default.goals
  • 用户提供的目标 IANA - KafkaRebalance.spec.goals
注意

资源分布目标受到代理资源的 容量限制

11.2.3. 硬和软优化目标

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

Cruise Control 将计算满足所有硬目标以及尽可能多的软目标(按优先级顺序)的优化建议。无法满足所有硬目标的优化建议将由 Cruise 控制而拒绝,而不会发送给用户进行批准。

注意

例如,您可能有一个软目标来在集群间平均分配主题的副本(主题分布目标)。如果这样做可让所有配置的硬目标满足,则 Cruise Control 将忽略这个目标。

在 Cruise Control 中,以下 主要优化目标 被预先设置为硬目标:

RackAwareGoal; MinTopicLeadersPerBrokerGoal; 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/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    # ...
  zookeeper:
    # ...
  entityOperator:
    topicOperator: {}
    userOperator: {}
  cruiseControl:
    brokerCapacity:
      inboundNetwork: 10000KB/s
      outboundNetwork: 10000KB/s
    config:
      # Note that `default.goals` (superset) must also include all `hard.goals` (subset)
      default.goals: >
        com.linkedin.kafka.cruisecontrol.analyzer.goals.NetworkInboundCapacityGoal,
        com.linkedin.kafka.cruisecontrol.analyzer.goals.NetworkOutboundCapacityGoal
      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 列表中,Cruise Control 仍会将它们视为硬目标,即使指定了 skipHardGoalCheck: true

11.2.4. 主要优化目标

所有用户都提供了主要的优化目标。没有在主优化目标中列出的目标不适用于 Cruise Control 操作。

除非更改 Cruise Control 部署配置,AMQ Streams 将以降序从 Cruise Control 中继承以下主要优化目标:

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 中指定 goals 属性。
  • 如果您需要修改继承的主要优化目标,请在 goals 配置选项中指定目标列表(按优先级降序排列)。
注意

为了避免生成优化建议时出现错误,请确保对 Kafka.spec.cruiseControl.config 中的 goalsdefault.goals 所做的任何更改都包含 hard.goals 属性指定的所有硬目标。要说明,还必须为主要优化目标和默认目标指定硬目标(作为子集)。

11.2.5. 默认优化目标

Cruise Control 使用默认优化目标来生成缓存的优化建议。有关缓存的优化建议的更多信息,请参阅 第 11.3 节 “优化提议概述”

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

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

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

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

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    # ...
  zookeeper:
    # ...
  entityOperator:
    topicOperator: {}
    userOperator: {}
  cruiseControl:
    brokerCapacity:
      inboundNetwork: 10000KB/s
      outboundNetwork: 10000KB/s
    config:
      # Note that `default.goals` (superset) must also include all `hard.goals` (subset)
      default.goals: >
        com.linkedin.kafka.cruisecontrol.analyzer.goals.RackAwareGoal,
        com.linkedin.kafka.cruisecontrol.analyzer.goals.ReplicaCapacityGoal,
        com.linkedin.kafka.cruisecontrol.analyzer.goals.DiskCapacityGoal
      hard.goals: >
        com.linkedin.kafka.cruisecontrol.analyzer.goals.RackAwareGoal
      # ...

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

11.2.6. 用户提供的优化目标

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

KafkaRebalance.spec.goals

用户提供的优化目标可以为不同的场景生成优化提议。例如,您可能希望在 Kafka 集群间优化领导副本分布,而无需考虑磁盘容量或磁盘利用率。因此,您可以创建一个 KafkaRebalance 自定义资源,其中包含用于领导副本分发的单个用户提供的目标。

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

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

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

其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.