8.2. 优化目标概述
要重新平衡 Kafka 集群,Cruise Control 使用优化目标来生成 优化方法, 您可以批准或拒绝这些优化。
优化目标是针对 Kafka 集群内工作负载重新分配和资源利用率的限制。AMQ Streams 支持在 Cruise Control 项目中开发的大多数优化目标。支持的目标(按默认降序排列)如下:
- 机架感知
- 副本容量
- capacity :磁盘容量、网络入站容量、网络出站容量、CPU 容量
- 副本发布
- 潜在的网络输出
资源分配 :磁盘利用率分布、网络入站利用率分布、网络出站利用率分布、CPU 利用率分布
注意资源分配目标使用代理 资源的能力限制 来控制。
- 领导字节速率分布
- 主题副本发布
- 领导程序副本发布
- 首选领导选举机制
有关每个优化目标的更多信息,请参阅 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 节 “生成优化分析”。
其他资源
- 第 8.5 节 “精简控制配置”
- Cruise Control Wiki 中的 配置.