7.2. 优化目标概述
优化目标是在 Kafka 集群中工作负载重新分配和资源利用率的限制。要重新平衡 Kafka 集群,Cruise Control 使用 优化目标来生成优化 提议,您可以批准或拒绝。
7.2.1. 优先级的目标顺序 复制链接链接已复制到粘贴板!
AMQ Streams 支持在 Cruise Control 项目中开发的大部分优化目标。支持的目标按默认优先级降序排列,如下所示:
- rack-awareness
- 一组主题的每个代理的最小领导副本数
- 副本容量
容量目标
- 磁盘容量
- 网络入站容量
- 网络出站容量
- CPU 容量
- 副本分发
- 潜在的网络输出
资源分布目标
- 磁盘使用分布
- 网络入站利用率分布
- 网络出站利用率分布
- CPU 使用率分发
- leader 字节(以字节为单位)分布
- 主题副本分发
- 领导副本分发
- 首选领导机制
- in-broker 磁盘容量
- intra-broker 磁盘用量分布
有关每个优化目标的更多信息,请参阅 Cruise Control Wiki 中的 Goals。
"编写您自己的"目标和 Kafka 分配器目标尚不受支持。
7.2.2. AMQ Streams 自定义资源中的目标配置 复制链接链接已复制到粘贴板!
您可以在 Kafka
和 KafkaRebalance
自定义资源中配置优化目标。Cruise Control 具有配置,可进行硬优化目标,必须得到满足、默认和用户提供的优化目标。
您可以在以下配置中指定优化目标:
-
Main goals —
Kafka.spec.cruiseControl.config.goals
-
硬目标 TOKEN-
Kafka.spec.cruiseControl.config.hard.goals
-
默认目标 TOKEN -
Kafka.spec.cruiseControl.config.default.goals
-
用户提供的目标 noProxy -
KafkaRebalance.spec.goals
资源分发目标取决于代理资源的 容量限制。
7.2.3. 硬和软优化目标 复制链接链接已复制到粘贴板!
硬目标是指 必须满足 优化提议的目标。未配置为硬目标的目标称为 软目标。您可以将软目标视为 最佳 目标:它们 不需要在 优化提议中满足,但包含在优化计算中。违反一个或多个软目标的一个优化方案,但满足所有硬目标是有效的。
Cruise Control 将计算满足所有硬目标以及尽可能多的软目标(按优先级顺序)的优化方案。无法满足所有硬目标的优化建议将由 Cruise 控制而拒绝,而不会发送给用户进行批准。
例如,您可能会有一个软目标,在集群中平均分配主题的副本(主题副本分布目标)。如果这样做可启用所有配置的硬目标,则控制将忽略这个目标。
在 Cruise Control 中,预设了以下 主要优化目标 :
RackAwareGoal; MinTopicLeadersPerBrokerGoal; ReplicaCapacityGoal; DiskCapacityGoal; NetworkInboundCapacityGoal; NetworkOutboundCapacityGoal; CpuCapacityGoal
RackAwareGoal; MinTopicLeadersPerBrokerGoal; ReplicaCapacityGoal; DiskCapacityGoal; NetworkInboundCapacityGoal; NetworkOutboundCapacityGoal; CpuCapacityGoal
您可以通过在 Kafka.spec.cruiseControl.config
中编辑 hard.goals
属性来配置 Cruise Control 部署配置中的硬目标。
-
要从 Cruise Control 继承 preset hard 目标,请不要在
Kafka.spec.cruiseControl.config
中指定hard.goals
属性 -
要更改预先设置的硬目标,请使用它们的完全限定域名在
hard.goals
属性中指定所需的目标。
硬优化目标的 Kafka
配置示例
增加配置的硬目标数量将减少减少 Cruise 控制生成有效优化方案的可能性。
如果在 KafkaRebalance
自定义资源中指定 skipHardGoalCheck: true
,则 Cruise Control 不会检查 用户提供的优化目标(在 KafkaRebalance.spec.goals
中)包含 所有配置的 硬目标(hard.goals
)。因此,如果不是全部,则用户提供的优化目标在 hard.goals
列表中,即使指定 skipHardGoalCheck: true
,也会将它们视为硬目标。
7.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
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
中的 hard.goals
属性中配置,这是您配置的主要优化目标的子集。否则,在生成优化方案时出现错误。
7.2.5. 默认优化目标 复制链接链接已复制到粘贴板!
Cruise Control 使用默认优化目标 来生成 缓存的优化建议。有关缓存的优化方案的更多信息,请参阅 第 7.3 节 “优化提议概述”。
您可以通过在 KafkaRebalance
自定义资源中设置 用户提供的优化目标 来覆盖默认的优化目标。
除非在 Cruise Control 部署配置中 指定 default.goals
,否则主要的优化目标将用作默认的优化目标。在这种情况下,缓存的优化提议会使用主要优化目标生成。
-
要使用主优化目标作为默认目标,请不要在
Kafka.spec.cruiseControl.config
中指定default.goals
属性。 -
要修改默认的优化目标,请编辑
Kafka.spec.cruiseControl.config
中的default.goals
属性。您必须使用主要优化目标的子集。
默认优化目标的 Kafka
配置示例
如果没有指定默认的优化目标,则会使用主优化目标生成缓存的提议。
7.2.6. 用户提供的优化目标 复制链接链接已复制到粘贴板!
用户提供的优化目标 缩小了特定优化提议的配置的默认目标。您可以在 KafkaRebalance
自定义资源的 spec.goals
中根据需要设置它们:
KafkaRebalance.spec.goals
KafkaRebalance.spec.goals
用户提供的优化目标可为不同的场景生成优化方案。例如,您可能想在不考虑磁盘容量或磁盘利用率的情况下优化 Kafka 集群中的领导副本分布。因此,您可以创建一个 KafkaRebalance
自定义资源,其中包含一个用于领导副本分布的单一用户提供的目标。
用户提供的优化目标必须:
- 包括所有配置的 硬目标,或发生错误
- 成为主要优化目标的子集
要忽略生成优化提议时配置的硬目标,请将 skipHardGoalCheck: true
属性添加到 KafkaRebalance
自定义资源。请参阅 第 7.6 节 “生成优化方案”。