Planifica el tamaño de tu clúster de Managed Service para Apache Kafka

En este documento, se describe cómo estimar la capacidad que necesitas para un clúster de Managed Service para Apache Kafka y cómo ajustar el tamaño de un clúster existente.

Cuando creas un clúster de Managed Service para Apache Kafka, eliges los siguientes parámetros para el tamaño del clúster:

  • vCPUs: Es la cantidad de CPU virtuales en el clúster. La cantidad mínima de CPU virtuales es 3.

  • Memoria: Es la cantidad de memoria por CPU virtual. Debes aprovisionar entre 1 GiB y 8 GiB por CPU virtual.

Puedes actualizar estos valores después de crear el clúster.

Elige el tamaño inicial del clúster

Para elegir el tamaño inicial del clúster, comienza por estimar los siguientes valores, según tu carga de trabajo en particular.

  • Capacidad de procesamiento de escritura: Es la tasa total a la que los productores envían datos al clúster, en MBps.
  • Capacidad de procesamiento de lectura: Es la tasa total a la que los consumidores leen datos del clúster, en MBps.

Para estimar el tamaño de un clúster necesario para controlar esta capacidad de procesamiento, sigue estos pasos:

  1. Calcula el ancho de banda total de escritura, incluida la replicación.

    Total write bandwidth = produce rate * replicas

    Este valor incluye el ancho de banda del cliente al agente líder y del líder a los agentes de réplica. La cantidad predeterminada de réplicas es 3.

  2. Calcula el ancho de banda total de lectura, incluida la replicación.

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

    Este valor incluye el ancho de banda para las operaciones de lectura del cliente (tasa de consumo), además del ancho de banda necesario para que las réplicas permanezcan sincronizadas. Las réplicas se sincronizan leyendo datos del líder de la partición. Se usa el término (replicas - 1) porque el líder de la partición no lee de ninguna réplica.

  3. Calcula la tasa de datos equivalente a la escritura.

    Como regla general, el ancho de banda de lectura es 4 veces más eficiente para procesar que el ancho de banda de escritura. Para tener en cuenta esta diferencia, calcula la tasa de datos equivalente a la escritura de la siguiente manera:

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

  4. Determina el uso objetivo de la CPU virtual. Este valor representa el uso promedio de la CPU virtual como un porcentaje de la capacidad de la CPU virtual. El uso real puede aumentar o disminuir con el tiempo.

    • Como línea de base, comienza con un objetivo de uso del 50%.
    • Si conoces los patrones de tráfico esperados, establece el objetivo de uso igual a la proporción del ancho de banda promedio equivalente a la escritura con el ancho de banda máximo que debes admitir.

    En general, aumentar el uso reduce el costo del clúster, ya que disminuye su tamaño, pero también es más riesgoso si el tráfico supera las estimaciones. El uso excesivo de la CPU virtual puede causar latencias y errores altos.

  5. Calcula la cantidad de CPU virtuales.

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

    La capacidad estimada para una sola CPU virtual en una sola zona es de 20 MBps. Por lo tanto, si las CPU virtuales se ejecutaran con un uso del 100%, necesitarías (write-equivalent rate / 20) CPU virtuales. Para obtener la cantidad real, divide ese valor por el uso objetivo y redondea hacia arriba.

    Además, enviar mensajes en lotes de menos de 10 KB reduce la capacidad de procesamiento por CPU, en relación con el parámetro de referencia aquí. En ese caso, ten en cuenta la capacidad de procesamiento reducida o considera enviar lotes más grandes.

  6. Estima la memoria requerida. Recomendamos 4 GiB de RAM para cada CPU virtual.

    Memory = vCPU count * 4 GiB

Realiza pruebas con tu carga de trabajo real para obtener el tamaño más preciso. Supervisa el uso de recursos del clúster y escala verticalmente si es necesario.

Ejemplo de cálculo de tamaño

Supongamos que una carga de trabajo tiene una tasa de escritura de 50 MBps y una tasa de lectura de 100 MBps, con 3 réplicas y un uso objetivo de la CPU virtual del 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

Límites de réplica de partición

Existen límites en los recuentos de réplicas de partición por clúster y por agente que son importantes tener en cuenta cuando se dimensiona el clúster.

El límite por clúster es de 100,000 réplicas de partición. Este es un límite estricto y es independiente de la cantidad de agentes en un clúster. Si tu carga de trabajo requiere más de 100,000 réplicas de partición, considera dividirla entre dos o más clústeres.

El límite por agente es de 4,000 réplicas de partición. Este no es un límite estricto. Si necesitas controlar más de esta cantidad de réplicas, considera aumentar el tamaño del clúster para aprovisionar más agentes. Para obtener información sobre cómo el servicio determina la cantidad de agentes, consulta Aprovisionamiento de agentes.

Una vez que tengas una cantidad suficiente de agentes para controlar tus particiones, puedes ajustar el tamaño de los agentes para adaptarse a la capacidad de procesamiento.

Actualiza el tamaño del clúster

Después de crear un clúster de Managed Service para Apache Kafka, puedes ajustar la cantidad de CPU virtuales y la memoria para satisfacer tus necesidades. Para obtener más información, consulta Actualiza un clúster de Managed Service para Apache Kafka.

Cuando actualizas un clúster existente, se aplican las siguientes reglas:

  • La proporción general de CPU virtuales a memoria del clúster siempre debe permanecer entre 1:1 y 1:8.

  • Debe haber al menos 1 CPU virtual y 1 GiB de memoria para cada agente existente. La cantidad de agentes nunca disminuye.

  • Si el clúster tiene una configuración de disco personalizada, la actualización debe cumplir con los requisitos de configuración de disco para el almacenamiento local.

  • Si aumentas la escala, el promedio de CPU virtuales y memoria por agente no puede disminuir en más del 10% en comparación con los promedios antes de la actualización. Por ejemplo, si intentas aumentar la escala de un clúster de 45 CPU virtuales (3 agentes) a 48 CPU virtuales (4 agentes), el promedio de CPU virtuales por agente disminuye de 15 a 12, lo que representa una reducción del 20% y supera el límite del 10%.

    Si necesitas disminuir la cantidad de CPU virtuales en más del 10%, te recomendamos que la reduzcas en varias etapas. Después de cada actualización, supervisa el uso de recursos y vuelve a balancear las particiones si es necesario.

    Sin embargo, si estás seguro de que tus agentes tendrán suficiente capacidad después de la actualización, puedes inhabilitar esta verificación ejecutando el gcloud managed-kafka clusters update comando con la allow_broker_downscale_on_cluster_upscale=true marca. Esta marca indica que aceptas el posible riesgo de rendimiento.

Ejemplo de operaciones de actualización

En los siguientes ejemplos, se comienza con un clúster que tiene 75 CPU virtuales, 130 GiB de RAM y 5 agentes.

Ejemplo de una operación de aumento de escala fallida

Aumenta la escala del clúster a 80 CPU virtuales y 140 GiB de RAM.

  • El servicio determina si se necesita un agente nuevo.

    • ceiling (80 vCPUs / 15) = 6 brokers

    El clúster crecería de 5 a 6 agentes, por lo que se activa la verificación de seguridad del 10%.

  • Los promedios actuales por agente son los siguientes:

    • 75 CPU virtuales / 5 agentes = 15 CPU virtuales por agente

    • 130 GiB / 5 agentes = 26 GiB por agente

  • Con 6 agentes, los nuevos promedios son los siguientes:

    • 80 CPU virtuales / 6 agentes = 13.33 CPU virtuales por agente, una reducción del 11.1%

    • 140 GiB / 6 agentes = 23.33 GiB por agente, una reducción del 10.2%

    La operación falla porque estos promedios superan el 10%.

Ejemplo de una operación de aumento de escala exitosa

Aumenta la escala del clúster a 85 CPU virtuales y 150 GiB de RAM.

  • El servicio determina si se necesita un agente nuevo.

    • ceiling (85 vCPUs / 15) = 6 brokers

    El clúster crecería de 5 a 6 agentes, por lo que se activa la verificación de seguridad del 10%.

  • Los promedios actuales por agente son los siguientes:

    • 75 CPU virtuales / 5 agentes = 15 CPU virtuales por agente

    • 130 GiB / 5 agentes = 26 GiB por agente

  • Con 6 agentes, los nuevos promedios son los siguientes:

    • 85 CPU virtuales / 6 agentes = 14.17 CPU virtuales por agente, una reducción del 5.5%

    • 150 GiB / 6 agentes = 25 GiB por agente, una reducción del 3.8%

Esta operación se realiza correctamente porque la reducción en el promedio de CPU virtuales y memoria por agente está dentro del límite del 10%.

Estima el tamaño de disco requerido

De forma predeterminada, Managed Service para Apache Kafka asigna 100 GiB por CPU virtual a cada agente. La asignación predeterminada proporciona suficiente almacenamiento local para la mayoría de las cargas de trabajo, pero puedes configurar el tamaño del disco del agente para tus requisitos específicos. En esta sección, se describe cómo estimar la cantidad de capacidad de disco que necesitas.

Cuando un agente recibe un mensaje, lo escribe en un archivo de segmento local. Cuando el archivo de segmento alcanza un tamaño o una antigüedad máximos, se cierra (o se "rota") y se mueve al almacenamiento remoto. El tamaño máximo de un archivo de segmento se especifica en la configuración log.roll.bytes, y la antigüedad máxima se especifica en la configuración log.segment.ms.

Cuando se rota un archivo de segmento, el agente abre un archivo de segmento nuevo. El segmento rotado permanece en el almacenamiento local mientras el agente lo copia al almacenamiento remoto. Por lo tanto, cada partición necesita suficiente espacio para almacenar un archivo de segmento rotado, además de espacio para un archivo de segmento nuevo mientras el segmento rotado se mueve al almacenamiento remoto.

De forma predeterminada, el tamaño máximo de un archivo de segmento es de 230 MiB. Para los clústeres con un uso moderado, puedes suponer que se necesitan 250 MiB por partición para proporcionar espacio de búfer adicional mientras se mueve un segmento rotado. Con esta suposición, el tamaño mínimo del disco por agente es el siguiente:

250 MiB * partition count * replication factor / broker count

Sin embargo, el tamaño requerido depende de factores como el tamaño máximo del archivo de segmento, la carga en el clúster, la tasa a la que se escriben datos nuevos y la latencia de las escrituras en el almacenamiento a largo plazo.

Para asegurarte de tener suficiente capacidad de disco, supervisa el tamaño del disco de tus particiones con la managedkafka/byte_size métrica.

¿Qué sigue?