规划 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,但无法将其删除。

分区副本限制

每个集群和每个代理的分区副本数量都有一些限制,在确定集群大小时,请务必考虑这些限制。

每个集群的限制为 100,000 个分区副本。这是一个硬性限制,与集群中的代理数量无关。如果您的工作负载需要超过 100,000 个分区副本,请考虑将其拆分到两个或多个集群中。

每个代理的限制为 4,000 个分区副本。这不是硬性限制。如果您需要处理的副本数量超过此限制,请考虑配置更多代理。您可以通过将集群的 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 vCPUs / 15) = 6 brokers

    集群将从 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 vCPUs / 15) = 6 brokers

    集群将从 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% 的限制范围内。

后续步骤