20.3. 优化提议概述
配置 KafkaRebalance
资源以生成优化建议并应用推荐的更改。optimization proposal 是要生成一个更加均衡的 Kafka 集群、在代理中平均分配分区工作负载的建议概述。
每个优化建议都基于一组用于生成它的 优化目标,受代理资源 配置的任何容量限制。
所有优化的提议都是对提议重新平衡的影响的估算。您可以批准或拒绝提议。在不生成优化建议的情况下,您无法批准集群重新平衡。
您可以在以下重新平衡模式下运行优化建议:
-
full
-
add-brokers
-
remove-brokers
20.3.1. 重新平衡模式 复制链接链接已复制到粘贴板!
您可以使用 KafkaRebalance
自定义资源的 spec.mode
属性指定重新平衡模式。
full
-
full
模式通过在集群中的所有代理间移动副本来运行完全重新平衡。如果KafkaRebalance
自定义资源中没有定义spec.mode
属性,则这是默认模式。 add-brokers
-
在扩展 Kafka 集群后,通过添加一个或多个代理来使用
add-brokers
模式。通常,在扩展 Kafka 集群后,新的代理仅用于托管新创建的主题的分区。如果没有创建新主题,则不会使用新添加的代理,现有代理仍保留在同一负载中。通过在向集群添加代理后立即使用add-brokers
模式,重新平衡操作会将副本从现有代理移到新添加的代理中。您可以使用KafkaRebalance
自定义资源的spec.brokers
属性将新代理指定为列表。 remove-brokers
-
在缩减 Kafka 集群前,通过删除一个或多个代理,使用
remove-brokers
模式。如果您缩减 Kafka 集群,代理也会关闭,即使它们托管副本。这可能会导致复制的分区,并可能导致某些分区位于其最小 ISR 下(同步副本)。为了避免这种潜在问题,remove-brokers
模式会将副本从要删除的代理中移出。当这些代理不再托管副本时,可以安全地运行缩减操作。您可以将您要删除的代理指定为KafkaRebalance
自定义资源的spec.brokers
属性中的列表。
通常,通过跨代理分布负载,使用 full
rebalance 模式来重新平衡 Kafka 集群。只有在您要扩展集群或缩减并相应地重新平衡副本时,才使用 add-brokers
和 remove-brokers
模式。
运行重新平衡的过程实际上在三种不同的模式中相同。唯一的区别是通过 spec.mode
属性指定模式,如果需要,列出添加或将通过 spec.brokers
属性删除的代理。
20.3.2. 优化提议的结果 复制链接链接已复制到粘贴板!
当生成优化建议时,会返回概述和代理负载。
- 概述
-
该摘要包含在
KafkaRebalance
资源中。概述建议的集群重新平衡,并指示涉及的更改的规模。成功生成的优化方案概述包含在KafkaRebalance
资源的Status.OptimizationResult
属性中。提供的信息是完整优化提议的摘要。 - 代理负载
- 代理负载存储在包含作为 JSON 字符串的数据的 ConfigMap 中。代理负载显示在提议重新平衡的值前和之后,以便您可以看到集群中每个代理的影响。
20.3.3. 手动批准或拒绝优化建议 复制链接链接已复制到粘贴板!
优化提议摘要显示了所提议的更改范围。
您可以使用 KafkaRebalance
资源的名称从命令行返回摘要。
返回优化提议概述
oc describe kafkarebalance <kafka_rebalance_resource_name> -n <namespace>
oc describe kafkarebalance <kafka_rebalance_resource_name> -n <namespace>
您还可以使用 jq
命令行 JSON 解析器工具。
使用 jq 返回优化提议概述
oc get kafkarebalance -o json | jq <jq_query>.
oc get kafkarebalance -o json | jq <jq_query>oc get kafkarebalance -o json | jq <jq_query>.
使用摘要决定是否批准或拒绝优化提议。
- 批准优化提议
-
您可以通过将
KafkaRebalance
资源的strimzi.io/rebalance
注解设置为批准
来删除优化建议。Cruise Control 将提议应用到 Kafka 集群,并启动集群重新平衡操作。 - 拒绝优化方案
-
如果您选择不批准优化方案,您可以更改优化目标或更新任何重新平衡性能调优选项,然后生成另一个提议。您可以通过将
strimzi.io/rebalance
注解设置为refresh
来为KafkaRebalance
资源生成一个新的优化建议。
使用优化建议评估重新平衡所需的移动。例如,概述描述了 inter-broker 和 intra-broker 移动。inter-broker 重新平衡在独立代理间移动数据。在使用 JBOD 存储配置时,intra-broker 重新平衡可在同一代理上的磁盘之间移动数据。即使您没有提前并批准提议,此类信息也很有用。
因为在重新平衡时在 Kafka 集群中出现额外的负载,您可能会拒绝优化过程或延迟其批准。
在以下示例中,提议建议在不同的代理间重新平衡数据。重新平衡涉及在代理间移动 55 分区副本,包括 12MB 数据。虽然分区副本间的移动对性能有高影响,但数据总数不大。如果总数据量较大,您可以拒绝提议,或者在批准重新平衡以限制 Kafka 集群性能的影响时的时间。
重新平衡性能调优选项有助于降低数据移动的影响。如果可扩展重新平衡周期,您可以将重新平衡分成较小的批处理。一次减少数据移动会减少集群的负载。
优化提议概述示例
这个提议还会将 24 个分区领导移到不同的代理中。这需要对 ZooKeeper 配置进行更改,这对性能有低的影响。
balancedness 分数是优化提议前后 Kafka 集群的整体平衡的测量。平衡分数基于优化目标。如果满足所有目标,则分数为 100。当一个目标不满足时,分数会降低。比较均衡分数,以查看 Kafka 集群是否低于重新平衡。
20.3.4. 自动批准优化方案 复制链接链接已复制到粘贴板!
要节省时间,您可以自动批准优化提议。使用自动化时,当您生成优化建议时,它会直接进入集群重新平衡中。
要启用优化提议 auto-approval 机制,请创建 KafkaRebalance
资源,并将 strimzi.io/rebalance-auto-approval
注解设置为 true
。如果注解没有设置或设置为 false
,则优化建议需要手动批准。
启用 auto-approval 机制的重新平衡请求示例
在自动批准优化提议时,您仍然可以检查状态。当重新平衡完成后,KafkaRebalance
资源的状态将变为 Ready
。
20.3.5. 优化提议概述属性 复制链接链接已复制到粘贴板!
下表解释优化提议概述部分中包含的属性。
JSON 属性 | Description |
---|---|
| 在集群代理磁盘间传输的分区副本数。
重新平衡操作期间的性能影响 : 高,但低于 |
| 尚未支持。返回空列表。 |
| 在独立代理之间移动的分区副本数量。 在重新平衡操作期间影响性能 :高。 |
| Kafka 集群在生成优化建议之前和之后的整体 均衡度 的测量。
分数是通过从 100 中减去每个违反软目标的
|
|
将在同一代理的磁盘之间移动的每个分区副本的大小总和(请参阅
在重新平衡操作期间影响性能 :变量.集群重新平衡所需的时间越大,完成集群重新平衡所需的时间。在同一代理的磁盘间移动大量数据比不同的代理之间的影响较低(请参阅 |
| 优化提议的指标窗口数量。 |
|
将移动到独立代理的每个分区副本的大小总和(请参阅 在重新平衡操作期间影响性能 :变量.集群重新平衡所需的时间越大,完成集群重新平衡所需的时间。 |
|
Kafka 集群中由优化提议涵盖的分区百分比。受 |
|
如果您在 |
| 领导程序切换到不同副本的分区数量。这涉及更改 ZooKeeper 配置。 在重新平衡操作期间影响性能 :低. |
| 尚未支持。返回空列表。 |
20.3.6. 代理加载属性 复制链接链接已复制到粘贴板!
代理负载存储在 ConfigMap 中(名称与 KafkaRebalance 自定义资源的名称相同),与 JSON 格式的字符串相同。此 JSON 字符串由一个 JSON 对象组成,其中包含链接到每个代理多个指标的代理 ID 的键。每个指标由三个值组成。第一个是应用优化提议前的指标值,第二个是应用提议后的指标的预期值,第三个是应用前两个值(在减前)之间的差别。
当 KafkaRebalance 资源处于 ProposalReady
状态并在重新平衡完成后保留时,ConfigMap 会出现。
您可以使用 ConfigMap 的名称从命令行查看其数据。
返回 ConfigMap 数据
oc describe configmaps <my_rebalance_configmap_name> -n <namespace>
oc describe configmaps <my_rebalance_configmap_name> -n <namespace>
您还可以使用 jq
命令行 JSON 解析器工具 从 ConfigMap 中提取 JSON 字符串。
使用 jq 从 ConfigMap 中提取 JSON 字符串
oc get configmaps <my_rebalance_configmap_name> -o json | jq '.["data"]["brokerLoad.json"]|fromjson|.'
oc get configmaps <my_rebalance_configmap_name> -o json | jq '.["data"]["brokerLoad.json"]|fromjson|.'
下表解释优化提议的代理加载 ConfigMap 中包含的属性:
JSON 属性 | Description |
---|---|
| 此代理上分区领导的副本数。 |
| 此代理上的副本数量。 |
| CPU 使用率作为定义容量的百分比。 |
| 磁盘利用率作为定义容量的百分比。 |
| 以 MB 为单位的绝对磁盘使用情况。 |
| 代理的网络输出率总数。 |
| 此代理上所有分区领导副本的网络输入率。 |
| 此代理上所有后续副本的网络输入率。 |
| 如果此代理成为当前主机的所有副本的领导,则假设的最大网络输出率。 |
20.3.7. 缓存的优化方案 复制链接链接已复制到粘贴板!
Cruise Control 根据配置的默认优化目标维护缓存的优化建议。从工作负载模型生成,缓存的优化方案每 15 分钟更新一次,以反映 Kafka 集群的当前状态。如果您使用默认优化目标生成优化建议,Cruise Control 会返回最新缓存的提议。
要更改缓存的优化提议刷新间隔,请编辑 Cruise Control 部署配置中的 proposal.expiration.ms
设置。考虑快速更改集群的间隔较短,尽管这会在 Cruise Control 服务器上增加负载。