18.6. 生成优化建议


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

您可以在以下模式之一中运行优化建议:

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

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

先决条件

  • 您已将 Cruise Control 部署到 AMQ Streams 集群。
  • 您已配置了优化目标,以及(可选)代理资源的容量限制。

有关配置 Cruise Control 的详情,请参考 第 18.5 节 “使用 Kafka 配置和部署 Cruise 控制”

流程

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

    完整 模式(默认)

    要使用 Kafka 资源中定义的 默认优化目标,请将 spec 属性留空。默认情况下,Cruise Control 以 full 模式重新平衡 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 属性指定 full 模式来运行完整的重新平衡。

    指定 full 模式的配置示例

    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. 要配置 用户提供的优化目标,而不是使用默认目标,请添加 goals 属性并输入一个或多个目标。

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

    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. (可选)要自动批准优化提议,请将 strimzi.io/rebalance-auto-approval 注解设置为 true

    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:
      goals:
        - RackAwareGoal
        - ReplicaCapacityGoal
      skipHardGoalCheck: true
    Copy to Clipboard Toggle word wrap
  5. 创建或更新资源:

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

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

  6. 如果您使用自动批准机制,请等待优化提议的状态更改为 Ready。如果您没有启用自动批准机制,请等待优化提议的状态更改为 ProposalReady

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

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

  7. 查看优化方案。

    优化建议包含在 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 容量错误。值得注意的是,这个利用率值不受 excludedTopics 配置的影响。虽然优化建议不会重新分配排除主题的副本,但它们的负载仍然在利用率计算中考虑。

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 使用率和容量的比率保持不变。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat