14.9. 生成优化建议


当您向 /rebalance 端点发出 POST 请求时,Cruise Control 会生成优化建议,以根据提供的优化目标重新平衡 Kafka 集群。您可以使用优化建议的结果来重新平衡 Kafka 集群。

您可以使用以下端点之一运行优化方案:

  • /rebalance
  • /add_broker
  • /remove_broker

您使用的端点取决于您是否正在在 Kafka 集群中已在运行的所有代理进行重新平衡 ; 或者要在扩展后或缩减 Kafka 集群前重新平衡。如需更多信息,请参阅使用代理扩展 重新平衡端点

优化建议作为空运行方式生成,除非提供了 dryrun 参数,并将其设置为 false。在"dry run 模式"中,Cruise Control 生成优化提议和估算结果,但不会通过重新平衡集群启动提议。

您可以分析优化建议中返回的信息,并决定是否批准它。

使用以下参数向端点发出请求:

dryrun

type: boolean, default: true

通知 Cruise Control 是否只生成优化提议(true),或者生成优化建议并执行集群重新平衡(false)。

dryrun=true (默认值)时,您还可以传递 verbose 参数,以返回 Kafka 集群状态的更多详细信息。这包括应用优化建议前后每个 Kafka 代理上加载的指标,以及 before 和 after 值之间的区别。

excluded_topics

类型: regex

与优化建议计算中排除的主题匹配的正则表达式。

目标

type: 字符串列表,默认:配置的 default.goals 列表

用户提供的优化目标列表,用于准备优化方法。如果没有提供目标,则使用 cruisecontrol.properties 文件中配置的 default.goals 列表。

skip_hard_goals_check

type: boolean, default: false

默认情况下,Cruise Control 检查用户提供的优化目标(在 goals 参数中)是否包含所有配置的硬目标(在 hard.goals中)。如果您提供不是配置的 hard.goals 子集的目标,则请求会失败。

如果要生成不使用所有配置的 hard.goals 优化目标,则将 skip_hard_goals_check 设置为 true

json

type: boolean, default: false

控制 Cruise Control 服务器返回的响应类型。如果没有提供,或者设置为 false,则 Cruise Control 会返回文本格式,以便在命令行中显示。如果要以编程方式提取返回信息的元素,请设置 json=true。这将返回 JSON 格式的文本,这些文本可以传送到 jq 等工具,或在脚本和程序中解析它们。

详细

type: boolean, default: false

控制 Cruise Control 服务器返回的响应中详细级别。可用于 dryrun=true

注意

其他参数可用。如需更多信息,请参阅 Cruise Control Wiki 中的 REST API

先决条件

  • Kafka 和 ZooKeeper 正在运行
  • Cruise Control 正在运行
  • (用于扩展的可选功能)您在 主机上安装了新的代理,以便在重新平衡中包括

流程

  1. 使用对 /rebalance/add_broker/remove_broker 端点的 POST 请求来生成优化建议。

    使用默认目标向 /rebalance 的请求示例

    curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance'
    Copy to Clipboard Toggle word wrap

    缓存优化建议会立即返回。

    注意

    如果返回 NotEnoughValidWindows,Cruise Control 尚未记录足够的指标数据,以生成优化器。等待几分钟,然后重新发送请求。

    使用指定目标向 /rebalance 的请求示例

    curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance?goals=RackAwareGoal,ReplicaCapacityGoal'
    Copy to Clipboard Toggle word wrap

    如果请求满足提供的目标,则缓存优化器会立即返回。否则,使用提供的目标生成新的优化建议;这需要更长的时间才能计算。您可以通过在请求中添加 ignore_proposal_cache=true 参数来强制实施此行为。

    在没有硬目标的情况下使用指定的目标向 /rebalance 的请求示例

    curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance?goals=RackAwareGoal,ReplicaCapacityGoal,ReplicaDistributionGoal&skip_hard_goal_check=true'
    Copy to Clipboard Toggle word wrap

    包含指定代理的 /add_broker 请求示例

    curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/add_broker?brokerid=3,4'
    Copy to Clipboard Toggle word wrap

    请求只包括新代理的 ID。例如,此请求添加了 ID 为 34 的代理。重新平衡时,副本从现有代理移到新代理中。

    排除指定代理的 /remove_broker 的请求示例

    curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/remove_broker?brokerid=3,4'
    Copy to Clipboard Toggle word wrap

    请求只包括被排除的代理 ID。例如,此请求排除 ID 为 34 的代理。重新平衡时,副本会从移除的代理移到其他现有代理中。

    注意

    如果要删除的代理包含排除的主题,则副本仍然会被移动。

  2. 查看响应中包含的优化建议。属性描述待处理的集群重新平衡操作。

    提议包含所提出优化的高级概述,以及各个默认优化目标的总结,以及执行过程后的预期集群状态。

    请特别注意以下信息:

    • 重新平衡概述后集群负载。如果它满足您的要求,您应该使用高级别概述来评估所提议的更改的影响。
    • n inter-broker replica (y MB) moves 表示在代理之间的网络间移动的数据量。数值越大,重新平衡期间对 Kafka 集群的潜在性能影响越高。
    • n intra-broker replica (y MB) moves 表示在代理本身(在磁盘间)移动的数据量。数值越大,对各个代理的潜在性能影响越大(尽管小于 n inter-broker replica (y MB) moves)。
    • 领导移动的数量。这在重新平衡过程中对集群的性能有可忽略的影响。

异步响应

默认情况下,Cruise Control REST API 端点超时时间在 10 秒后超时,虽然提议生成在服务器上将继续。如果最新缓存的优化器尚未就绪,或者用户提供的优化目标是通过 ignore_proposal_cache=true 指定,则可能会出现超时。

要允许您稍后检索优化过程,请记录请求的唯一标识符,该标识符在 /rebalance 端点的响应标头中提供。

要使用 curl 获取响应,请指定 verbose (-v)选项:

curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance'
Copy to Clipboard Toggle word wrap

下面是一个标头示例:

* Connected to cruise-control-server (::1) port 9090 (#0)
> POST /kafkacruisecontrol/rebalance HTTP/1.1
> Host: cc-host:9090
> User-Agent: curl/7.70.0
> Accept: /
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Mon, 01 Jun 2020 15:19:26 GMT
< Set-Cookie: JSESSIONID=node01wk6vjzjj12go13m81o7no5p7h9.node0; Path=/
< Expires: Thu, 01 Jan 1970 00:00:00 GMT
< User-Task-ID: 274b8095-d739-4840-85b9-f4cfaaf5c201
< Content-Type: text/plain;charset=utf-8
< Cruise-Control-Version: 2.0.103.redhat-00002
< Cruise-Control-Commit_Id: 58975c9d5d0a78dd33cd67d4bcb497c9fd42ae7c
< Content-Length: 12368
< Server: Jetty(9.4.26.v20200117-redhat-00001)
Copy to Clipboard Toggle word wrap

如果优化建议在超时时间内没有就绪,您可以重新提交 POST 请求,这一次在标头中包括原始请求的 User-Task-ID

curl -v -X POST -H 'User-Task-ID: 274b8095-d739-4840-85b9-f4cfaaf5c201' 'cruise-control-server:9090/kafkacruisecontrol/rebalance'
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat