14.9. 生成优化建议
当您向 /rebalance 端点发出 POST 请求时,Cruise Control 会根据提供的优化目标,对 Kafka 集群进行重新平衡。您可以使用优化建议的结果来重新平衡 Kafka 集群。
您可以使用以下端点之一运行优化建议:
-
/rebalance -
/add_broker -
/remove_broker
您使用的端点取决于您是否正在在 Kafka 集群中已在运行的所有代理进行重新平衡 ; 或者要在扩展后或缩减 Kafka 集群前重新平衡。如需更多信息,请参阅使用代理扩展重新平衡端点。
优化建议作为空运行方式生成,除非提供了 dryrun 参数,并将其设置为 false。在 "dry run mode" 中,Cruise Control 生成优化建议和估算结果,但不通过重新平衡集群来启动建议。
您可以分析优化中返回的信息,并决定是否批准它。
使用以下参数向端点发出请求:
dryrun
类型:布尔值、default: true
告知 Cruise 控制是否只生成优化建议(true),或生成优化建议并执行集群重新平衡(false)。
当 dryrun=true (默认值)时,您还可以传递 verbose 参数,以返回到 Kafka 集群状态的详细信息。这包括在应用优化建议前后每个 Kafka 代理上负载的指标,以及之前和之后值之间的差别。
excluded_topics
type: regex
与主题匹配的正则表达式,以便从优化建议计算中排除。
goals
类型:字符串列表 default:配置的 default.goals 列表
用户提供的优化目标列表,用于准备优化方法。如果没有提供目标,则使用 cruisecontrol.properties 文件中配置的 default.goals 列表。
skip_hard_goals_check
类型:布尔值,默认为 false
默认情况下,Cruise Control 检查用户提供的优化目标(在 目标 参数中)是否包含所有配置的硬目标(在 hard.goals中)。如果您提供目标不是配置的 hard.goals 的子集,则请求将失败。
如果要生成不使用所有配置的 hard.goals 优化目标,则将 skip_hard_goals_check 设置为 true。
json
类型:布尔值,默认为 false
控制 Cruise Control 服务器返回的响应类型。如果没有提供或设置为 false,则 Cruise Control 返回文本格式用于在命令行中显示。如果要通过编程方式提取返回的信息元素,请设置 json=true。这将返回 JSON 格式的文本,这些文本可以传送到 jq 等工具,或在脚本和程序中解析它们。
verbose
类型:布尔值,默认为 false
控制由 Cruise Control 服务器返回的响应中详细程度。可以与 dryrun=true 一起使用。
其他参数可用。如需更多信息,请参阅 Cruise Control Wiki 中的 REST API。
先决条件
- Kafka 和 ZooKeeper 正在运行
- Cruise Control 正在运行
- (可选)您已在 主机上安装了新的代理,以便在重新平衡中包括
流程
使用对
/rebalance、/add_broker或/remove_broker端点的 POST 请求来生成优化建议。使用默认目标对
/rebalance的请求示例curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance'
curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 缓存的优化工具会立即返回。
注意如果返回
NotEnoughValidWindows,Cruise Control 尚未记录足够的指标数据,以生成优化器。等待几分钟,然后重新发出请求。使用指定目标对
/rebalance的请求示例curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance?goals=RackAwareGoal,ReplicaCapacityGoal'
curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance?goals=RackAwareGoal,ReplicaCapacityGoal'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果请求满足提供的目标,则立即返回缓存的优化建议。否则,会使用提供的目标生成一个新的优化建议;这需要更长的时间来计算。您可以通过在请求中添加
ignore_proposal_cache=true参数来强制实施此行为。在不实现硬目标的情况下使用指定目标进行
/rebalance的请求示例curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance?goals=RackAwareGoal,ReplicaCapacityGoal,ReplicaDistributionGoal&skip_hard_goal_check=true'
curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance?goals=RackAwareGoal,ReplicaCapacityGoal,ReplicaDistributionGoal&skip_hard_goal_check=true'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对包含指定代理的
/add_broker的请求示例curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/add_broker?brokerid=3,4'
curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/add_broker?brokerid=3,4'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请求仅包含新代理的 ID。例如,这个请求会添加 ID
3和4的代理。在重新平衡时,副本会移到现有代理中的新代理中。对排除指定代理的
/remove_broker的请求示例curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/remove_broker?brokerid=3,4'
curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/remove_broker?brokerid=3,4'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请求只包含被排除的代理 ID。例如,这个请求排除了 ID
3和4的代理。在重新平衡时,副本将从被删除的代理移到其他现有代理中。注意如果正在移除的代理具有排除的主题,副本仍会移动。
查看响应中包含的优化建议。属性描述待处理的集群重新平衡操作。
提议包含所提出优化的高级概述,以及各个默认优化目标的总结,以及执行过程后的预期集群状态。
请特别注意以下信息:
-
在
重新平衡概述后集群负载。如果满足您的要求,您应该使用高级别概述来评估所提出更改的影响。 -
n inter-broker 副本(y MB)移动表示要在代理间移动的数据量。数值越大,在重新平衡过程中对 Kafka 集群的潜在性能影响越大。 -
n intra-broker 副本(y MB)移动表示要在代理本身(磁盘之间)内移动数据。数值越大,对各个代理的潜在性能影响越大(尽管小于n inter-broker replica (y MB) moves)。 - 领导迁移的数量。这在重新平衡过程中对集群性能有微不足的影响。
-
在
异步响应
默认情况下,Cruise Control REST API 端点在 10 秒后超时,虽然服务器中的生成将继续在服务器中。如果最新缓存的优化器尚未就绪,或者用户提供的优化目标是通过 ignore_proposal_cache=true 指定,则可能会出现超时。
要允许您稍后检索优化过程,请记录请求的唯一标识符,该标识符在 /rebalance 端点的响应标头中提供。
要使用 curl 获取响应,请指定详细(-v)选项:
curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance'
curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance'
以下是标题示例:
如果超时内没有提供优化建议,您可以重新提交 POST 请求,这一次包括标头中原始请求的 User-Task-ID :
curl -v -X POST -H 'User-Task-ID: 274b8095-d739-4840-85b9-f4cfaaf5c201' 'cruise-control-server:9090/kafkacruisecontrol/rebalance'
curl -v -X POST -H 'User-Task-ID: 274b8095-d739-4840-85b9-f4cfaaf5c201' 'cruise-control-server:9090/kafkacruisecontrol/rebalance'
下一步做什么