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-brokersremove-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>
Copy to Clipboard Toggle word wrap

您还可以使用 jq 命令行 JSON 解析器工具

使用 jq 返回优化提议概述

oc get kafkarebalance -o json | jq <jq_query>oc get kafkarebalance -o json | jq <jq_query>.
Copy to Clipboard Toggle word wrap

使用摘要决定是否批准或拒绝优化提议。

批准优化提议
您可以通过将 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 集群性能的影响时的时间。

重新平衡性能调优选项有助于降低数据移动的影响。如果可扩展重新平衡周期,您可以将重新平衡分成较小的批处理。一次减少数据移动会减少集群的负载。

优化提议概述示例

Name:         my-rebalance
Namespace:    myproject
Labels:       strimzi.io/cluster=my-cluster
Annotations:  API Version:  kafka.strimzi.io/v1alpha1
Kind:         KafkaRebalance
Metadata:
# ...
Status:
  Conditions:
    Last Transition Time:  2022-04-05T14:36:11.900Z
    Status:                ProposalReady
    Type:                  State
  Observed Generation:     1
  Optimization Result:
    Data To Move MB:  0
    Excluded Brokers For Leadership:
    Excluded Brokers For Replica Move:
    Excluded Topics:
    Intra Broker Data To Move MB:         12
    Monitored Partitions Percentage:      100
    Num Intra Broker Replica Movements:   0
    Num Leader Movements:                 24
    Num Replica Movements:                55
    On Demand Balancedness Score After:   82.91290759174306
    On Demand Balancedness Score Before:  78.01176356230222
    Recent Windows:                       5
  Session Id:                             a4f833bd-2055-4213-bfdd-ad21f95bf184
Copy to Clipboard Toggle word wrap

这个提议还会将 24 个分区领导移到不同的代理中。这需要对 ZooKeeper 配置进行更改,这对性能有低的影响。

balancedness 分数是优化提议前后 Kafka 集群的整体平衡的测量。平衡分数基于优化目标。如果满足所有目标,则分数为 100。当一个目标不满足时,分数会降低。比较均衡分数,以查看 Kafka 集群是否低于重新平衡。

20.3.4. 自动批准优化方案

要节省时间,您可以自动批准优化提议。使用自动化时,当您生成优化建议时,它会直接进入集群重新平衡中。

要启用优化提议 auto-approval 机制,请创建 KafkaRebalance 资源,并将 strimzi.io/rebalance-auto-approval 注解设置为 true。如果注解没有设置或设置为 false,则优化建议需要手动批准。

启用 auto-approval 机制的重新平衡请求示例

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaRebalance
metadata:
  name: my-rebalance
  labels:
    strimzi.io/cluster: my-cluster
  annotations:
    strimzi.io/rebalance-auto-approval: "true"
spec:
  mode: # any mode
  # ...
Copy to Clipboard Toggle word wrap

在自动批准优化提议时,您仍然可以检查状态。当重新平衡完成后,KafkaRebalance 资源的状态将变为 Ready

20.3.5. 优化提议概述属性

下表解释优化提议概述部分中包含的属性。

Expand
表 20.1. 优化提议概述中包含的属性
JSON 属性Description

numIntraBrokerReplicaMovements

在集群代理磁盘间传输的分区副本数。

重新平衡操作期间的性能影响 : 高,但低于 numReplicaMovements

excludedBrokersForLeadership

尚未支持。返回空列表。

numReplicaMovements

在独立代理之间移动的分区副本数量。

在重新平衡操作期间影响性能 :高。

onDemandBalancednessScoreBefore, onDemandBalancednessScoreAfter

Kafka 集群在生成优化建议之前和之后的整体 均衡度 的测量。

分数是通过从 100 中减去每个违反软目标的 BalancednessScore 的总和。Cruise Control 根据几个因素(包括优先级 - 目标在 default.goal 或用户提供的目标列表中)为每个优化目标 分配一个 BalancednessScore

Before score 基于 Kafka 集群的当前配置。After 分数基于生成的优化提议。

intraBrokerDataToMoveMB

将在同一代理的磁盘之间移动的每个分区副本的大小总和(请参阅 numIntraBrokerReplicaMovements)。

在重新平衡操作期间影响性能 :变量.集群重新平衡所需的时间越大,完成集群重新平衡所需的时间。在同一代理的磁盘间移动大量数据比不同的代理之间的影响较低(请参阅 dataToMoveMB)。

recentWindows

优化提议的指标窗口数量。

dataToMoveMB

将移动到独立代理的每个分区副本的大小总和(请参阅 numReplicaMovements)。

在重新平衡操作期间影响性能 :变量.集群重新平衡所需的时间越大,完成集群重新平衡所需的时间。

monitoredPartitionsPercentage

Kafka 集群中由优化提议涵盖的分区百分比。受 excludedTopics 数量的影响。

excludedTopics

如果您在 KafkaRebalance 资源中的 spec.excludedTopicsRegex 属性中指定了正则表达式,则此处列出了与该表达式匹配的所有主题名称。这些主题不包括在优化建议中计算分区副本/领导移动。

numLeaderMovements

领导程序切换到不同副本的分区数量。这涉及更改 ZooKeeper 配置。

在重新平衡操作期间影响性能 :低.

excludedBrokersForReplicaMove

尚未支持。返回空列表。

20.3.6. 代理加载属性

代理负载存储在 ConfigMap 中(名称与 KafkaRebalance 自定义资源的名称相同),与 JSON 格式的字符串相同。此 JSON 字符串由一个 JSON 对象组成,其中包含链接到每个代理多个指标的代理 ID 的键。每个指标由三个值组成。第一个是应用优化提议前的指标值,第二个是应用提议后的指标的预期值,第三个是应用前两个值(在减前)之间的差别。

注意

当 KafkaRebalance 资源处于 ProposalReady 状态并在重新平衡完成后保留时,ConfigMap 会出现。

您可以使用 ConfigMap 的名称从命令行查看其数据。

返回 ConfigMap 数据

oc describe configmaps <my_rebalance_configmap_name> -n <namespace>
Copy to Clipboard Toggle word wrap

您还可以使用 jq 命令行 JSON 解析器工具 从 ConfigMap 中提取 JSON 字符串。

使用 jq 从 ConfigMap 中提取 JSON 字符串

oc get configmaps <my_rebalance_configmap_name> -o json | jq '.["data"]["brokerLoad.json"]|fromjson|.'
Copy to Clipboard Toggle word wrap

下表解释优化提议的代理加载 ConfigMap 中包含的属性:

Expand
JSON 属性Description

领导

此代理上分区领导的副本数。

replicas

此代理上的副本数量。

cpuPercentage

CPU 使用率作为定义容量的百分比。

diskUsedPercentage

磁盘利用率作为定义容量的百分比。

diskUsedMB

以 MB 为单位的绝对磁盘使用情况。

networkOutRate

代理的网络输出率总数。

leaderNetworkInRate

此代理上所有分区领导副本的网络输入率。

followerNetworkInRate

此代理上所有后续副本的网络输入率。

potentialMaxNetworkOutRate

如果此代理成为当前主机的所有副本的领导,则假设的最大网络输出率。

20.3.7. 缓存的优化方案

Cruise Control 根据配置的默认优化目标维护缓存的优化建议。从工作负载模型生成,缓存的优化方案每 15 分钟更新一次,以反映 Kafka 集群的当前状态。如果您使用默认优化目标生成优化建议,Cruise Control 会返回最新缓存的提议。

要更改缓存的优化提议刷新间隔,请编辑 Cruise Control 部署配置中的 proposal.expiration.ms 设置。考虑快速更改集群的间隔较短,尽管这会在 Cruise Control 服务器上增加负载。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat