规划 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

分区副本限制

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

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

每个代理的限制为 4,000 个分区副本。这不是硬性限制。如果您需要处理超过此数量的副本,请考虑增加集群的大小以预配更多代理。如需了解该 服务如何确定代理数量,请参阅 代理预配

在拥有足够数量的代理来处理分区后,您可以调整代理的大小以适应吞吐量。

更新集群大小

创建 Managed Service for Apache Kafka 集群后,您可以调整 vCPU 数量和内存,以满足您的需求。如需了解详情,请参阅 更新 Managed Service for Apache Kafka 集群

更新现有集群时,适用以下规则:

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

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

  • 如果集群具有 自定义磁盘配置, 则更新必须满足 本地存储的磁盘配置要求

  • 如果扩容,则每个代理的平均 vCPU 和内存与更新前的平均值相比,不能减少超过 10%。例如,如果您尝试将集群从 45 个 vCPU(3 个代理)扩容到 48 个 vCPU(4 个代理),则每个代理的平均 vCPU 会从 15 个减少到 12 个,减少了 20%,超过了 10% 的限制。

    如果您需要将 vCPU 数量减少超过 10%,我们建议分几个阶段减少。每次更新后,请监控资源利用率,并在需要时重新平衡分区。

    但是,如果您确信代理在更新后将有足够的容量 ,则可以通过运行带有 allow_broker_downscale_on_cluster_upscale=true 标志的 gcloud managed-kafka clusters update 命令来停用此检查。此标志表示您接受潜在的性能风险。

更新操作示例

以下示例从一个具有 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% 的限制范围内。

估算所需的磁盘大小

默认情况下,Managed Service for Apache Kafka 会为每个代理分配 100 GiB 的 vCPU。默认分配为大多数工作负载提供了足够的本地存储空间,但您可以根据自己的特定要求配置代理磁盘大小。本部分介绍了如何估算所需的磁盘容量。

当代理收到消息时,它会将消息写入本地段文件。 当段文件达到最大大小或使用期限时,它会关闭(或“轮替”),并移至远程存储空间。段文件的最大大小由 log.roll.bytes 设置指定,最大使用期限由 log.segment.ms 设置指定。

当段文件轮替时,代理会打开一个新的段文件。在代理将轮替的段文件复制到远程存储空间时,该段文件仍保留在本地存储空间中。 因此,每个分区都需要足够的空间来存储轮替的段文件,以及在轮替的段文件移至远程存储空间时存储新段文件的空间。

默认情况下,段文件的最大大小为 230 MiB。对于利用率适中的集群,您可以假设每个分区需要 250 MiB,以便在轮替的段文件移动时提供额外的缓冲空间。使用此假设,每个代理的最小磁盘大小为:

250 MiB * partition count * replication factor / broker count

但是,所需的大小取决于多种因素,例如最大段文件大小、集群上的负载、写入新数据的速率以及写入长期存储空间的延迟时间。

在每个代理上保留一些未使用的磁盘容量至关重要。没有磁盘容量的代理的行为是不可预测的,可能会导致数据丢失以及集群不稳定。 根据可用磁盘总大小 (disk/limit)监控磁盘用量 (disk/used_bytes)。如果磁盘用量超过可用磁盘总大小的 80%,请配置更大的 磁盘大小。如需了解详情,请参阅 监控集群容量

后续步骤