14.9. 生成优化分析
当您向 /rebalance
端点发出 POST 请求时,Cruise Control 会根据提供的优化目标生成一个优化建议来重新平衡 Kafka 集群。
优化建议生成为空 运行,除非提供了 dryrun
参数并将其设置为 false
。在"死运行模式"中,Cruise Control 生成优化建议和预计的结果,但不通过重新平衡集群来启动建议。
您可以分析优化建议中返回的信息,并决定是否启动它。
以下是对 /rebalance
端点的请求的关键参数。有关所有可用参数的详情,请查看 Cruise Control Wiki 中的 REST API。
dryrun
type: boolean, default: true
告知 Cruise Control,您是否只想生成优化建议(true
),还是生成优化建议并执行集群重新平衡(false
)。
当 dryrun=true
(默认)时,您还可以传递 verbose
参数来返回有关 Kafka 集群状态的更多详细信息。这包括应用优化建议前后每个 Kafka 代理负载的指标,以及之前和之后的值之间的区别。
excluded_topics
类型:regex
与优化建议计算中排除的主题匹配的正则表达式。
goals
type: 字符串列表,默认为:配置的 default.goals
列表
用于准备优化建议的用户提供的优化目标列表。如果没有提供目标,则使用 cruisecontrol.properties
文件中的 default.goals
列表。
skip_hard_goals_check
类型:布尔值,默认: false
默认情况下,Cruise Control 检查用户提供的优化目标(在 goals
参数中)是否包含所有配置的硬目标(在 hard.goals
中)。如果您提供不是配置的 hard.goals
子集的目标,请求会失败。
如果要生成带有用户提供的优化目标(不包括所有配置的 hard.goals
)的优化建议,请将 skip_hard_goals_check
设置为 true
。
json
类型:布尔值,默认: false
控制 Cruise 控制服务器返回的响应类型。如果没有提供,或设置为 false
,Cruise Control 会返回格式化的文本以显示在命令行中。如果要以编程方式提取返回的信息元素,请设置 json=true
。这将返回可传送到 jq
等工具的 JSON 格式文本,或者在脚本和程序中解析。
verbose
类型:布尔值,默认: false
控制 Cruise 控制服务器返回的响应详情级别。可以与 dryrun=true
一起使用。
先决条件
- kafka 和 ZooKeeper 正在运行
- 英镑控件正在运行
流程
要为控制台生成格式化的"dry run"优化建议,请向
/rebalance
端点发送 POST 请求。使用配置的
default.goals
:curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance'
缓存优化建议会立即返回。
注意如果返回
NotEnoughValidWindows
,Cruise Control 还没有记录足够的指标数据来生成优化建议。等待几分钟,然后重新发送请求。要指定用户提供的优化目标而不是配置的
default.goals
,请在goals
参数中指定一个或多个目标:curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance?goals=RackAwareGoal,ReplicaCapacityGoal'
如果它满足提供的目标,则立即返回缓存的优化建议。否则,将使用提供的目标生成新的优化建议;计算所需的时间要长。您可以通过在请求中添加
ignore_proposal_cache=true
参数来强制实施此行为。要指定用户提供的优化目标,请在请求中添加所有配置的硬目标:
skip_hard_goal_check=true
curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance?goals=RackAwareGoal,ReplicaCapacityGoal,ReplicaDistributionGoal&skip_hard_goal_check=true'
查看响应中包含的优化建议。属性描述待处理的集群重新平衡操作。
该提议包含建议优化的高级摘要,后跟每个默认优化目标的摘要,以及建议执行后的预期集群状态。
请特别注意以下信息:
-
Cluster load after rebalance
概述。如果满足您的要求,则应使用高级别摘要评估提议更改的影响。 -
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
获取响应,请指定详细(-v
)选项:
curl -v -X POST 'cruise-control-server:9090/kafkacruisecontrol/rebalance'
以下是标头示例:
* 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)
如果优化建议未在超时内就绪,您可以重新提交 POST 请求,这一次在标头中包含原始请求的 User-Task-ID
:
curl -v -X POST -H 'User-Task-ID: 274b8095-d739-4840-85b9-f4cfaaf5c201' 'cruise-control-server:9090/kafkacruisecontrol/rebalance'
接下来要做什么