本文档介绍了如何估算 Managed Service for Apache Kafka 集群所需的容量,以及如何调整现有集群的大小。
创建 Managed Service for Apache Kafka 集群时,您可以为集群的大小选择以下参数:
vCPUs:集群中的 vCPU 数量。vCPU 数量下限为 3。
内存:每个 vCPU 的内存量。您必须为每个 vCPU 预配 1 GiB 到 8 GiB 之间的内存。
您可以在创建集群后更新这些值。
选择初始集群规模
如需选择初始集群规模,请先根据您的特定工作负载估计以下值。
- 写入吞吐量:生产者向集群发送数据的总速率(以 MBps 为单位)。
- 读取吞吐量:消费者从集群读取数据的总速率,以 MBps 为单位。
如需估算处理此吞吐量所需的集群大小,请执行以下步骤:
计算总写入带宽,包括复制。
Total write bandwidth = produce rate * replicas此值包括从客户端到领导者代理的带宽,以及从领导者到副本代理的带宽。默认副本数为 3。
计算总读取带宽,包括复制。
Total read bandwidth = consume rate + produce rate * ( replicas - 1)此值包括客户端读取操作的带宽(消耗速率),以及副本保持同步所需的带宽。副本通过从分区领导者读取数据来进行同步。之所以使用
(replicas - 1)一词,是因为分区领导者不会从任何副本读取数据。计算写入等效数据速率。
一般来说,读取带宽的处理效率是写入带宽的 4 倍。为了弥补这一差异,请按以下方式计算写入等效数据速率:
Write-equivalent rate = (total write bandwidth) + (total read bandwidth / 4)确定目标 vCPU 利用率。此值表示平均 vCPU 利用率,以 vCPU 容量的百分比表示。实际利用率可能会随时间推移而出现峰值或下降。
- 作为基准,请先将利用率目标值设为 50%。
- 如果您知道预期的流量模式,请将利用率目标值设置为平均写入等效带宽与必须容纳的峰值带宽的比率。
一般来说,提高利用率可通过缩小集群规模来降低集群费用,但如果流量超出估计值,风险也会随之增加。vCPU 利用率过高可能会导致延迟时间过长和出现错误。
计算 vCPU 的数量。
vCPU count = ceiling (write-equivalent rate / 20 MBps / utilization)单个可用区中单个 vCPU 的估计容量为 20 MBps。因此,如果 vCPU 以 100% 的利用率运行,则需要
(write-equivalent rate / 20)个 vCPU。如需获得实际数量,请将该值除以目标利用率,然后向上舍入。此外,与此处的基准相比,以小于 10 KB 的批次发送消息会降低每个 CPU 的吞吐量。在这种情况下,请考虑降低吞吐量容量,或考虑发送更大的批次。
估算所需内存。我们建议为每个 vCPU 分配 4 GiB 的 RAM。
Memory = vCPU count * 4 GiB
使用实际工作负载进行测试,以获得最准确的容量调整结果。监控集群的资源用量,并根据需要进行扩容。
大小计算示例
假设某工作负载的写入速率为 50 MBps,读取速率为 100 MBps,具有 3 个副本,目标 vCPU 利用率为 50%。
Total write bandwidth = 50 MBps * 3 replicas = 150 MBpsTotal read traffic = 100 MBps + 50 MBps * (3 - 1) = 200 MBpsWrite-equivalent rate = 150 MBps + (200 MBps / 4) = 200 MBpsTarget utilization = 0.5Number of vCPUs = ceiling (200 MBps / 20 MBps / 0.5) = 20 vCPUsMemory = 20 vCPUs * 4 GiB = 80 GiB
分区副本限制
在确定集群规模时,请务必考虑每个集群和每个代理的分区副本数量限制。
每个集群的限制为 10 万个分区副本。这是硬性限制,与集群中的代理数量无关。如果您的工作负载需要超过 10 万个分区副本,请考虑将其拆分到两个或更多个集群中。
每个代理的限制为 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 个 vCPU、130 GiB RAM 和 5 个代理的集群开始。
升级失败操作的示例
将集群纵向扩容至 80 个 vCPU 和 140 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 个 vCPU 和 150 GiB RAM。
该服务会确定是否需要新的代理。
- 上限(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% 的限制范围内。
估算所需的磁盘大小
默认情况下,Managed Service for Apache Kafka 会为每个 broker 的每个 vCPU 分配 100 GiB 的存储空间。默认分配可为大多数工作负载提供足够的本地存储空间,但您可以根据具体需求配置代理磁盘大小。本部分介绍了如何估算所需的磁盘容量。
当代理接收到消息时,会将消息写入本地段文件。
当段文件达到最大大小或存在时间上限时,系统会关闭(或“滚动”)该文件并将其移至远程存储空间。段文件的最大大小由 log.roll.bytes 设置指定,最大存在时间由 log.segment.ms 设置指定。
当某个段文件滚动时,代理会打开一个新的段文件。滚动后的段会保留在本地存储空间中,同时代理会将其复制到远程存储空间。因此,每个分区都需要有足够的空间来存储已滚动处理的段文件,以及在将已滚动处理的段文件移至远程存储空间时存储新段文件的空间。
默认情况下,分段文件的大小上限为 230 MiB。对于利用率适中的集群,您可以假设每个分区需要 250 MiB,以便在移动滚动段时提供额外的缓冲区空间。根据此假设,每个代理的最小磁盘大小为:
250 MiB * partition count * replication factor / broker count
不过,所需的大小取决于多种因素,例如最大段文件大小、集群负载、写入新数据的速率以及写入长期存储的延迟时间。
请务必在每个代理上保留一些未使用的磁盘容量。没有磁盘容量的代理的行为是不可预测的,可能会导致数据丢失以及集群不稳定。监控磁盘使用情况 (disk/used_bytes) 与总可用磁盘大小 (disk/limit) 的对比情况。如果磁盘使用量超过总可用磁盘大小的 80%,请配置更大的磁盘大小。如需了解详情,请参阅监控集群容量。
后续步骤
- 创建 Managed Service for Apache Kafka 集群
- 监控 Managed Service for Apache Kafka 集群
- 更新 Managed Service for Apache Kafka 集群
- 配置代理磁盘大小