14.5. 优化目标概述
为了重新平衡 Kafka 集群,Cruise Control 使用优化目标来生成 优化方法。优化目标是针对 Kafka 集群内工作负载重新分配和资源利用率的限制。
红帽企业 Linux 上的 AMQ 流支持 Cruise Control 项目中开发的所有优化目标。支持的目标(按默认降序排列)如下:
- 机架感知
- 每个代理针对一组主题的领导副本最少数量
- 副本容量
- 容量:磁盘容量、网络入站容量、网络出站容量
- CPU 容量
- 副本发布
- 潜在的网络输出
- 资源分布:磁盘利用率分布、网络入站利用率分布、网络出站利用率分布
- 领导字节速率分布
- 主题副本发布
- CPU 用量分布
- 领导程序副本发布
- 首选领导选举机制
- Kafka Assigner 磁盘用量分布
- Broker 磁盘容量
- Broker 磁盘内部使用情况
有关每个优化目标的更多信息,请参阅 Cruise Control Wiki 中的目标。
清理控制属性文件中的目标配置
您可以在 cruise-control/config/
目录中的 cruisecontrol.properties
文件中配置优化目标。有些配置必须满足 硬 优化目标,以及 主 和 默认 优化目标。
用户提供的可选 优化目标在运行时被设置为请求 /rebalance
端点的参数。
优化目标受到 broker 资源的任何 容量限制。
以下小节更详细地描述了每个目标配置。
主优化目标
主优化目标适用于所有用户。主优化目标中没有列出的目标不适用于 Cruise 控制操作。
cruisecontrol.properties
文件中以降序为优先级顺序在 goals
属性中预先设置以下 master 优化目标:
RackAwareGoal; MinTopicLeadersPerBrokerGoal; ReplicaCapacityGoal; DiskCapacityGoal; NetworkInboundCapacityGoal; NetworkOutboundCapacityGoal; ReplicaDistributionGoal; PotentialNwOutGoal; DiskUsageDistributionGoal; NetworkInboundUsageDistributionGoal; NetworkOutboundUsageDistributionGoal; CpuUsageDistributionGoal; TopicReplicaDistributionGoal; LeaderReplicaDistributionGoal; LeaderBytesInDistributionGoal; PreferredLeaderElectionGoal
为简单起见,我们建议您不要更改预先设定的主优化目标,除非您需要完全排除一个或多个目标用于生成优化调整。如果需要,可以在配置默认优化目标时修改主优化目标的优先级顺序。
如果您需要修改预先设定的主优化目标,请在 goals
属性中指定一个目标列表,按优先级降序排列。使用完全限定域名,如 cruisecontrol.properties
文件中所示。
您必须至少指定一个主目标,否则 Cruise Control 将崩溃。
如果您更改了预先设置的主优化目标,您必须确保配置的 hard.goals
是您配置的主优化目标的子集。否则,生成优化时会出现错误。
硬目标和软目标
硬目标就是在优化调整时 必须满足 的目标。未配置为硬目标的目标称为 软目标。您可以将软目标视为 最佳工作 目标:它们在优化调整时不需要满足,而是包含在优化计算中。
粗体控件将计算出符合所有硬目标和尽可能多的软目标(按优先顺序)的优化条件。无法 满足所有硬目标的优化建议被拒绝,不会发送给用户。
例如,您可能有一个软目标来在集群中平均分发主题的副本(主题副本分发目标)。如果这样做能够实现所有配置的硬目标,挑战控制将忽略此目标。
以下主优化目标作为 cruisecontrol.properties
文件中的 hard.goals
属性中的硬目标预先设定:
RackAwareGoal; MinTopicLeadersPerBrokerGoal; ReplicaCapacityGoal; DiskCapacityGoal; NetworkInboundCapacityGoal; NetworkOutboundCapacityGoal; CpuCapacityGoal
要更改硬目标,请使用完全限定域名编辑 hard.goals
属性并指定所需的目标。
增加硬目标数量可降低Cruise控制计算和生成有效优化结果的可能性。
默认优化目标
精简控制 使用默认的优化目标 列表来生成 缓存的优化建议。如需更多信息,请参阅 第 14.6 节 “优化调整概述”。
您可以通过设置 用户提供的优化目标,在运行时覆盖默认优化目标。
cruisecontrol.properties
文件中按降序顺序在 default.goals
属性中预先设置以下默认优化目标:
RackAwareGoal; MinTopicLeadersPerBrokerGoal; ReplicaCapacityGoal; DiskCapacityGoal; NetworkInboundCapacityGoal; NetworkOutboundCapacityGoal; CpuCapacityGoal; ReplicaDistributionGoal; PotentialNwOutGoal; DiskUsageDistributionGoal; NetworkInboundUsageDistributionGoal; NetworkOutboundUsageDistributionGoal; CpuUsageDistributionGoal; TopicReplicaDistributionGoal; LeaderReplicaDistributionGoal; LeaderBytesInDistributionGoal
您必须至少指定一个默认目标,否则 Cruise Control 将崩溃。
要修改默认优化目标,请在 default.goals
属性中以降序排列为目标列表。默认目标必须是主优化目标的子集;使用完全限定域名。
用户提供的优化目标
用户提供的优化目标 缩小了针对特定优化建议配置的默认目标。您可以根据需要将它们设置为对 /rebalance
端点的 HTTP 请求中的参数。如需更多信息,请参阅 第 14.9 节 “生成优化分析”。
用户提供的优化目标可针对不同的情景生成优化。例如,您可能想要在 Kafka 集群间优化领导副本分布,而不考虑磁盘容量或磁盘使用率。因此,您向 /rebalance
端点发送请求,其中包含领导副本分发的单一目标。
用户提供的优化目标必须:
要忽略优化建议中配置的硬目标,请在请求中添加 skip_hard_goals_check=true
参数。
其它资源
- 第 14.8 节 “精简控制配置”
- Cruise Control Wiki 中的 配置.