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: {}

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

    指定 完整模式的 配置示例

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaRebalance
    metadata:
      name: my-rebalance
      labels:
        strimzi.io/cluster: my-cluster
    spec:
      mode: full

    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

    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

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

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

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

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

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaRebalance
    metadata:
      name: my-rebalance
      labels:
        strimzi.io/cluster: my-cluster
    spec:
      goals:
        - RackAwareGoal
        - ReplicaCapacityGoal
  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
  4. 创建或更新资源:

    oc apply -f <kafka_rebalance_configuration_file>

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

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

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

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

  6. 回顾优化方案。

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

    oc describe kafkarebalance <kafka_rebalance_resource_name>

    优化建议示例

    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

    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.

注意

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

接下来要执行的操作

第 7.7 节 “批准优化方案”

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部