规划 Managed Service for Apache Kafka 集群的大小

本文档介绍了如何估算 Managed Service for Apache Kafka 集群所需的容量,以及如何调整现有集群的大小。

创建 Managed Service for Apache Kafka 集群时,您可以为集群的大小选择以下参数:

  • vCPUs:集群中的 vCPU 数量。vCPU 的数量下限为 3。

  • 内存:每个 vCPU 的内存量。您必须为每个 vCPU 预配 1 GiB 到 8 GiB 之间的内存。

您可以在创建集群后更新这些值。

选择初始聚类大小

如需选择初始集群大小,请先根据您的特定工作负载估算以下值。

  • 写入吞吐量:生产者向集群发送数据的总速率,以 MBps 为单位。
  • 读取吞吐量:消费者从集群读取数据的总速率,以 MBps 为单位。

如需估算处理此吞吐量所需的集群大小,请执行以下步骤:

  1. 计算总写入带宽,包括复制

    Total write bandwidth = produce rate * replicas

    此值包括从客户端到领导者代理的带宽,以及从领导者到副本代理的带宽。默认副本数为 3。

  2. 计算总读取带宽,包括复制。

    Total read bandwidth = consume rate + produce rate * ( replicas - 1)

    此值包括客户端读取操作(消耗速率)所需的带宽,以及副本保持同步所需的带宽。副本通过从分区领导者读取数据来进行同步。之所以使用 (replicas - 1) 一词,是因为分区领导者不从任何副本读取数据。

  3. 计算写入等效数据速率。

    一般来说,读取带宽的处理效率是写入带宽的 4 倍。为了弥补这一差异,请按以下方式计算写入等效数据速率:

    Write-equivalent rate = (total write bandwidth) + (total read bandwidth / 4)

  4. 确定目标 vCPU 利用率。此值表示平均 vCPU 利用率(以 vCPU 容量的百分比表示)。实际利用率可能会随时间推移而出现峰值或下降。

    • 首先,将利用率目标值设为 50%。
    • 如果您知道预期的流量模式,请将利用率目标值设置为平均写入等效带宽与必须容纳的峰值带宽的比率。

    一般来说,提高利用率可通过缩小集群规模来降低集群费用,但如果流量超出估计值,风险也会随之增加。过高的 vCPU 利用率可能会导致延迟时间过长和错误。

  5. 计算 vCPU 的数量。

    vCPU count = ceiling (write-equivalent rate / 20 MBps / utilization)

    单个可用区中单个 vCPU 的估计容量为 20 MBps。因此,如果 vCPU 以 100% 的利用率运行,则需要 (write-equivalent rate / 20) 个 vCPU。如需获得实际数量,请将该值除以目标利用率,然后向上舍入。

    此外,与此处的基准相比,以小于 10 KB 的批次发送消息会降低每个 CPU 的吞吐量。在这种情况下,请考虑降低吞吐量容量,或考虑发送更大的批次。

  6. 估算所需内存。我们建议为每个 vCPU 分配 4 GiB 的 RAM。

    Memory = vCPU count * 4 GiB

使用真实工作负载进行测试,以获得最准确的容量调整结果。监控集群的资源用量,并在需要时进行扩容。

规模计算示例

假设某工作负载的写入速率为 50 MBps,读取速率为 100 MBps,具有 3 个副本,目标 vCPU 利用率为 50%。

  1. Total write bandwidth = 50 MBps * 3 replicas = 150 MBps
  2. Total read traffic = 100 MBps + 50 MBps * (3 - 1) = 200 MBps
  3. Write-equivalent rate = 150 MBps + (200 MBps / 4) = 200 MBps
  4. Target utilization = 0.5
  5. Number of vCPUs = ceiling (200 MBps / 20 MBps / 0.5) = 20 vCPUs
  6. Memory = 20 vCPUs * 4 GiB = 80 GiB

代理

创建集群时,系统会在至少三个可用区中的每个可用区内预配至少一个代理。代理会尽可能均匀地分布在各个可用区中,并且所有代理都具有相同数量的 vCPU。可以使用以下公式计算经纪商数量:

number of brokers = max(3, ceiling(vCPUs / 15))

例如,一个具有 75 个 vCPU 的集群从 5 个代理开始。

如果您更改 vCPU 的数量,这些 vCPU 会分配给现有代理,每个代理最多分配 15 个 vCPU。如果您将集群大小增加到每个代理超过 15 个 vCPU,系统会预配一个新的代理。预配新代理后,可以将其缩减为 1 个 vCPU,但无法将其删除。

更新集群大小

创建 Managed Service for Apache Kafka 集群后,您可以根据需要调整 vCPU 数量和内存。更新现有集群时,需遵守以下规则:

  • 集群的总体 vCPU 与内存比率必须始终保持在 1:1 到 1:8 之间。

  • 如果缩减规模,每个现有代理必须至少有 1 个 vCPU 和 1 GiB 内存。代理的数量永远不会减少。

  • 如果进行扩容,并且更改导致添加了新的代理,则每个代理的平均 vCPU 和内存与更新前的平均值相比,降幅不得超过 10%。

    例如,如果您尝试将集群从 45 个 vCPU(3 个代理)向上扩展到 48 个 vCPU(4 个代理),则操作会失败。这是因为每个代理的平均 vCPU 从 15 减少到 12,减少了 20%,超过了 10% 的限制。

如果您需要将 CPU 数量减少 10% 以上,建议分几个阶段进行。每次更新后,监控资源利用率,并在需要时重新平衡分区。

不过,如果您确信更新后您的代理将有足够的容量,则可以停用此检查。如需停用此检查,请在 gcloud managed-kafka clusters update 命令中将 allow_broker_downscale_on_cluster_upscale 标志设置为 true。此标志表示您接受潜在的性能风险。

如需更新集群,请参阅更新 Managed Service for Apache Kafka 集群

更新操作示例

以下示例从具有 75 个 vCPU130 GiB RAM5 个代理的集群开始。

升级操作失败的示例

将集群扩容到 80 个 vCPU140 GiB RAM

  • 该服务会确定是否需要新的代理。

    • ceiling(80 个 vCPU / 15)= 6 个代理

    集群将从 5 个代理增加到 6 个代理,因此会触发 10% 的安全检查。

  • 目前,每位经纪人的平均值为:

    • 75 个 vCPU / 5 个代理 = 每个代理 15 个 vCPU

    • 130 GiB / 5 个代理 = 每个代理 26 GiB

  • 如果使用 6 个代理,新的平均值如下:

    • 80 个 vCPU / 6 个代理 = 每个代理 13.33 个 vCPU,减少了 11.1%

    • 140 GiB / 6 个代理 = 每个代理 23.33 GiB,减少了 10.2%

    操作失败,因为这些平均值超过了 10%。

成功放大操作的示例

将集群纵向扩容至 85 个 vCPU150 GiB RAM

  • 该服务会确定是否需要新的代理。

    • ceiling(85 个 vCPU / 15)= 6 个代理

    集群将从 5 个代理增加到 6 个代理,因此会触发 10% 的安全检查。

  • 目前,每位经纪人的平均值为:

    • 75 个 vCPU / 5 个代理 = 每个代理 15 个 vCPU

    • 130 GiB / 5 个代理 = 每个代理 26 GiB

  • 如果使用 6 个代理,新的平均值如下:

    • 85 个 vCPU / 6 个代理 = 每个代理 14.17 个 vCPU,减少了 5.5%

    • 150 GiB / 6 个代理 = 每个代理 25 GiB,减少了 3.8%

此操作成功,因为每个代理的平均 vCPU 和内存减少量在 10% 的限制范围内。

后续步骤