7.6. 生成优化方案


当您创建或更新 KafkaRebalance 资源时,Cruise Control 会根据配置的 优化 目标为 Kafka 集群生成 优化建议。分析优化方案中的信息,并决定是否批准它。您可以使用优化探测的结果来重新平衡 Kafka 集群。

您可以以以下模式之一运行优化方案:

  • full (默认)
  • add-brokers
  • remove-brokers

您使用的模式取决于您是否在在 Kafka 集群中运行的所有代理之间进行重新平衡,还是要在扩展或缩减 Kafka 集群前重新平衡。如需更多信息,请参阅 使用代理扩展 重新平衡模式

先决条件

流程

  1. 创建 KafkaRebalance 资源并指定适当的模式。

    完整 模式(默认)

    要使用 Kafka 资源 中定义的默认优化目标,请将 spec 属性留空。默认情况下,Cruise Control 重新平衡 Kafka 集群以 完全 模式。

    默认有完整重新平衡的配置示例

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaRebalance
    metadata:
      name: my-rebalance
      labels:
        strimzi.io/cluster: my-cluster
    spec: {}
    Copy to Clipboard Toggle word wrap

    您还可以通过 spec.mode 属性指定 完整的 模式,运行完整的重新平衡。

    指定 完整模式的 配置示例

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaRebalance
    metadata:
      name: my-rebalance
      labels:
        strimzi.io/cluster: my-cluster
    spec:
      mode: full
    Copy to Clipboard Toggle word wrap

    add-brokers 模式

    如果要在扩展后重新平衡 Kafka 集群,请指定 add-brokers 模式。

    在这个模式中,现有副本被移到新添加的代理中。您需要指定一个代理作为列表。

    指定 add-brokers 模式的配置示例

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaRebalance
    metadata:
      name: my-rebalance
      labels:
        strimzi.io/cluster: my-cluster
    spec:
      mode: add-brokers
      brokers: [3, 4] 
    1
    Copy to Clipboard Toggle word wrap

    1
    由扩展操作添加的新添加的代理列表。这个属性是必需的。
    remove-brokers 模式

    如果要在缩减前重新平衡 Kafka 集群,请指定 remove-brokers 模式。

    在这个模式中,副本会从要删除的代理中移出。您需要指定要删除的代理作为列表。

    指定 remove-brokers 模式的配置示例

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaRebalance
    metadata:
      name: my-rebalance
      labels:
        strimzi.io/cluster: my-cluster
    spec:
      mode: remove-brokers
      brokers: [3, 4] 
    1
    Copy to Clipboard Toggle word wrap

    1
    要通过缩减操作删除的代理列表。这个属性是必需的。
    注意

    无论使用的重新平衡模式如何,以下步骤以及批准或停止重新平衡的步骤都相同。

  2. 要配置 用户提供的优化目标 而不使用默认的目标,请添加 目标 属性并输入一个或多个目标。

    在以下示例中,机架意识和副本容量配置为用户提供的优化目标:

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaRebalance
    metadata:
      name: my-rebalance
      labels:
        strimzi.io/cluster: my-cluster
    spec:
      goals:
        - RackAwareGoal
        - ReplicaCapacityGoal
    Copy to Clipboard Toggle word wrap
  3. 要忽略配置的硬目标,请添加 skipHardGoalCheck: true 属性:

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaRebalance
    metadata:
      name: my-rebalance
      labels:
        strimzi.io/cluster: my-cluster
    spec:
      goals:
        - RackAwareGoal
        - ReplicaCapacityGoal
      skipHardGoalCheck: true
    Copy to Clipboard Toggle word wrap
  4. 创建或更新资源:

    oc apply -f <kafka_rebalance_configuration_file>
    Copy to Clipboard Toggle word wrap

    Cluster Operator 从 Cruise Control 请求优化探测。这可能需要几分钟时间,具体取决于 Kafka 集群的大小。

  5. 等待优化提议的状态更改为 ProposalReady

    oc get kafkarebalance -o wide -w -n <namespace>
    Copy to Clipboard Toggle word wrap
    PendingProposal
    PendingProposal 状态意味着重新平衡 Operator 正在轮询 Cruise Control API 来检查优化提议是否就绪。
    ProposalReady
    ProposalReady 状态表示优化提议已准备好审核和批准。

    当状态变为 ProposalReady 时,优化提议可以批准。

  6. 回顾优化方案。

    优化的提议包含在 KafkaRebalance 资源的 Status.Optimization Result 属性中。

    oc describe kafkarebalance <kafka_rebalance_resource_name>
    Copy to Clipboard Toggle word wrap

    优化建议示例

    Status:
      Conditions:
        Last Transition Time:  2020-05-19T13:50:12.533Z
        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:         0
        Monitored Partitions Percentage:      100
        Num Intra Broker Replica Movements:   0
        Num Leader Movements:                 0
        Num Replica Movements:                26
        On Demand Balancedness Score After:   81.8666802863978
        On Demand Balancedness Score Before:  78.01176356230222
        Recent Windows:                       1
      Session Id:                             05539377-ca7b-45ef-b359-e13564f1458c
    Copy to Clipboard Toggle word wrap

    Optimization Result 部分中的属性描述了待处理的集群重新平衡操作。有关每个属性的描述,请参阅 优化提议的内容

CPU 容量不足

如果 Kafka 集群根据 CPU 使用率过载,您可能在 KafkaRebalance 状态中看到 CPU 容量不足。值得注意的是,这种使用率值不受 excludeTopics 配置的影响。虽然优化建议不会重新分配排除主题的副本,但在利用率计算中仍将考虑它们的负载。

CPU 使用率错误示例

com.linkedin.kafka.cruisecontrol.exception.OptimizationFailureException:
        [CpuCapacityGoal] Insufficient capacity for cpu (Utilization 615.21,
        Allowed Capacity 420.00, Threshold: 0.70). Add at least 3 brokers with
        the same cpu capacity (100.00) as broker-0. Add at least 3 brokers with
        the same cpu capacity (100.00) as broker-0.
Copy to Clipboard Toggle word wrap

注意

该错误以百分比而不是 CPU 内核数显示 CPU 容量。因此,它不会直接映射到 Kafka 自定义资源中配置的 CPU 数量。它类似于每个代理有一个 虚拟 CPU,它有在 Kafka.spec.kafka.resources.limits.cpu 中配置的 CPU 周期。这不会影响重新平衡行为,因为 CPU 使用率和容量之间的比例保持不变。

接下来要执行的操作

第 7.7 节 “批准优化方案”

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat