En este tutorial se explica cómo configurar y desplegar un escalador automático de Kafka como servicio de Cloud Run. Este escalador automático lleva a cabo la lógica de escalado de una carga de trabajo de consumidor de Kafka, como un despliegue de grupo de trabajadores de Cloud Run. La herramienta de escalado automático de Kafka lee las métricas de tu clúster de Kafka y usa el escalado manual para un grupo de trabajadores o un servicio de Cloud Run para escalar una carga de trabajo de consumidor de Kafka en función de la métrica de latencia del consumidor de Kafka.
En el siguiente diagrama se muestra cómo un servicio de escalado automático de Kafka lee métricas de un clúster de Kafka para escalar automáticamente un grupo de trabajadores de consumidores de Kafka.
Roles obligatorios
Para obtener los permisos que necesitas para implementar y ejecutar este servicio, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos:
- Desarrollador de Cloud Run (
roles/run.developer
) - Usuario de cuenta de servicio (
roles/iam.serviceAccountUser
) - Lector de Artifact Registry (
roles/artifactregistry.reader
) - Administrador de Cloud Scheduler (
roles/cloudscheduler.admin
) para crear la tarea de Cloud Scheduler que active las comprobaciones de escalado automático - Administrador de cola de tareas de Cloud
(
roles/cloudtasks.queueAdmin
) para crear la cola de tareas de Cloud para las comprobaciones de escalado automático - Administrador de seguridad
(
roles/iam.securityAdmin
) para conceder permisos a cuentas de servicio
Antes de empezar
Para configurar y usar el autoescalador de Kafka, necesitas los siguientes recursos.
- Clúster de Kafka
- Consumidor desplegado
Clúster de Kafka
- Un clúster de Kafka debe ejecutarse en Compute Engine, Google Kubernetes Engine o Managed Service para Apache Kafka.
- Un tema de Kafka configurado, con eventos que se publican en ese tema.
Consumidor de Cloud Run desplegado
- Una carga de trabajo de consumidor de Kafka debe desplegarse en Cloud Run como un servicio o un grupo de trabajadores. Debe configurarse para conectarse a tu clúster, tema y grupo de consumidores de Kafka. Para ver un ejemplo de consumidor de Kafka, consulta Cloud Run Kafka Autoscaler Example Consumer (Consumidor de ejemplo de autoescalador de Kafka de Cloud Run).
- Tu carga de trabajo de consumidor debe estar en el mismo proyecto Google Cloud que tu clúster de Kafka.
Prácticas recomendadas
- Conecta tus consumidores de Kafka a tu red de VPC mediante VPC directa. La VPC directa te permite conectarte a tu clúster de Kafka mediante direcciones IP privadas y mantener el tráfico en tu red VPC.
- Configura una comprobación del estado de actividad para tus consumidores de Kafka que compruebe si el consumidor está obteniendo eventos. La comprobación del estado ayuda a garantizar que las instancias en mal estado se reinicien automáticamente si dejan de procesar eventos, aunque el contenedor no falle.
Crear la herramienta de adaptación dinámica de Kafka
Puedes usar Cloud Build para compilar una imagen de contenedor del escalador automático de Kafka a partir de su código fuente.
Clona el repositorio:
git clone https://github.com/GoogleCloudPlatform/cloud-run-kafka-scaler.git
Ve a la carpeta del repositorio:
cd cloud-run-kafka-scaler
Para especificar el nombre de la imagen de salida, actualice %ARTIFACT_REGISTRY_IMAGE%
en el archivo cloudbuild.yaml
incluido. Por ejemplo: us-central1-docker.pkg.dev/my-project/my-repo/my_kafka_autoscaler
.
gcloud builds submit --tag us-central1-docker.pkg.dev/my-project/my-repo/my_kafka_autoscaler
Este comando crea la imagen de contenedor y la envía a Artifact Registry. Anota la ruta de la imagen completa (SCALER_IMAGE_PATH
), ya que la necesitarás más adelante.
Ten en cuenta que la imagen resultante no se ejecutará de forma local. Está diseñada para superponerse a una imagen base de Java. Para obtener más información, incluido cómo volver a montar la imagen del contenedor para ejecutarla de forma local, consulta Configurar actualizaciones automáticas de la imagen base.
Definir la configuración del autoescalador de Kafka
Puedes configurar el escalador automático de Kafka mediante secretos. La herramienta de escalado automático actualiza su configuración periódicamente, lo que significa que puedes enviar nuevas versiones de secretos para cambiar la configuración sin tener que volver a implementar la herramienta de escalado automático.
Configurar las propiedades del cliente de Kafka
Puedes configurar la conexión a la API Kafka Admin montando un secreto como volumen al implementar el escalador automático de Kafka.
Crea un archivo llamado kafka_client_config.txt
e incluye las propiedades de configuración del cliente de administrador de Kafka que quieras añadir. La propiedad bootstrap.servers
es obligatoria:
bootstrap.servers=BOOTSTRAP_SERVER_LIST
Sustituye BOOTSTRAP_SERVER_LIST por la lista HOST:PORT
del clúster de Kafka.
Configurar la autenticación de Kafka
Si tu servidor Kafka requiere autenticación, incluye las propiedades de configuración necesarias en el archivo kafka_client_config.txt
. Por ejemplo, para conectarse a un clúster de Managed Service para Apache Kafka mediante credenciales predeterminadas de la aplicación con Google OAuth, este secreto debe incluir las siguientes propiedades:
bootstrap.servers=BOOTSTRAP_SERVER_LIST
security.protocol=SASL_SSL
sasl.mechanism=OAUTHBEARER
sasl.login.callback.handler.class=com.google.cloud.hosted.kafka.auth.GcpLoginCallbackHandler
sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required;
Sustituye BOOTSTRAP_SERVER_LIST por la lista HOST:PORT
del clúster de Kafka.
Para usar las credenciales predeterminadas de la aplicación con un clúster de Managed Service para Apache Kafka, también debes asignar el rol Cliente de Kafka gestionado (roles/managedkafka.client
) a la cuenta de servicio del escalador automático de Kafka:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/managedkafka.client"
Haz los cambios siguientes:
- SCALER_SERVICE_ACCOUNT: nombre de la cuenta de servicio de la herramienta de escalado automático de Kafka.
- PROJECT_ID: el ID del proyecto del servicio de escalado automático de Kafka.
Para crear el secreto, que se montará como un volumen en la implementación, usa el archivo kafka_client_config.txt
:
gcloud secrets create ADMIN_CLIENT_SECRET_NAME --data-file=kafka_client_config.txt
Sustituye ADMIN_CLIENT_SECRET_NAME por el nombre del secreto de autenticación de Kafka.
Configurar el escalado
El escalador automático de Kafka lee su configuración de escalado del volumen /scaler-config/scaling
. El contenido de este volumen debe tener el formato YAML. Te recomendamos que montes un volumen secreto para esta configuración.
Crea un archivo llamado scaling_config.yaml
con la siguiente configuración:
spec: scaleTargetRef: name: projects/PROJECT_ID/locations/REGION/workerpools/CONSUMER_SERVICE_NAME metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: TARGET_CPU_UTILIZATION activationThreshold: CPU_ACTIVATION_THRESHOLD tolerance: CPU_TOLERANCE windowSeconds: CPU_METRIC_WINDOW - type: External external: metric: name: consumer_lag target: type: AverageValue averageValue: LAG_THRESHOLD activationThreshold: LAG_ACTIVATION_THRESHOLD tolerance: LAG_TOLERANCE
Haz los cambios siguientes:
- PROJECT_ID: el ID del proyecto de la carga de trabajo del consumidor de Kafka que se va a escalar automáticamente.
- REGION: la región de la carga de trabajo del consumidor de Kafka que se va a autoescalar.
- CONSUMER_SERVICE_NAME: el nombre de la carga de trabajo del consumidor de Kafka que se va a escalar automáticamente.
- TARGET_CPU_UTILIZATION: el uso de CPU objetivo para los cálculos de autoescalado. Por ejemplo,
60
. - LAG_THRESHOLD: umbral de la métrica
consumer_lag
para activar el autoescalado. Por ejemplo,1000
. - (Opcional) CPU_ACTIVATION_THRESHOLD: umbral de activación de la CPU. Cuando todas las métricas están inactivas, el consumidor de destino se reduce a cero. El valor predeterminado es
0
. - (Opcional) CPU_TOLERANCE: umbral que impide que se produzcan cambios en la escala si está dentro del intervalo especificado. Se expresa como un porcentaje del uso de CPU objetivo. El valor predeterminado es
0.1
. - (Opcional) CPU_METRIC_WINDOW: periodo de tiempo, en segundos, durante el cual se calcula la utilización media de la CPU. El valor predeterminado es
120
. - (Opcional) LAG_ACTIVATION_THRESHOLD: umbral de activación de la métrica
consumer_lag
. Cuando todas las métricas están inactivas, el consumidor de destino se reduce a cero. El valor predeterminado es0
. - (Opcional) LAG_TOLERANCE: umbral que impide que se produzcan cambios en la escala si está dentro del intervalo especificado. Se expresa como un porcentaje del retraso del consumidor objetivo. El valor predeterminado es
0.1
.
Si quiere, puede configurar propiedades de escalado avanzadas mediante un bloque behavior:
.
Este bloque admite muchas de las mismas propiedades que las políticas de escalado de HPA de Kubernetes.
Si no especifica un bloque behavior
, se usará la siguiente configuración predeterminada:
behavior: scaleDown: stabilizationWindowSeconds: 300 policies: - type: Percent value: 50 periodSeconds: 30 selectPolicy: Min scaleUp: stabilizationWindowSeconds: 0 policies: - type: Percent value: 100 periodSeconds: 15 - type: Instances value: 4 periodSeconds: 15 selectPolicy: Max
Para crear el volumen de secretos, que se montará en deployment, copia la configuración en un archivo llamado scaling_config.yaml
y, a continuación, ejecuta lo siguiente:
gcloud secrets create SCALING_CONFIG_SECRET_NAME --data-file=scaling_config.yaml
Sustituye SCALING_CONFIG_SECRET_NAME por el nombre del secreto de escalado.
Desplegar la herramienta de adaptación dinámica de Kafka
Una vez que hayas completado los requisitos previos, podrás desplegar el servicio de escalado automático de Kafka y su infraestructura de asistencia. Se proporcionan un módulo de Terraform y una secuencia de comandos shell para simplificar este proceso.
gcloud
En esta sección se explica cada comando de gcloud necesario para desplegar manualmente el escalador automático. En la mayoría de los casos, recomendamos usar la secuencia de comandos shell o el módulo de Terraform.
Crear una cuenta de servicio
Los requisitos de la cuenta de servicio dependen del intervalo de comprobación del autoescalado que hayas configurado. Puedes configurar el autoescalador de Kafka para que realice comprobaciones de autoescalado a intervalos flexibles:
- Un minuto o más: Cloud Scheduler activa la comprobación del escalado automático con una solicitud POST en el intervalo seleccionado.
Menos de un minuto: Cloud Scheduler activa la creación de varias tareas de Cloud cada minuto, en función de la frecuencia configurada.
Uno o varios minutos
Cuenta de servicio de escalado automático de Kafka
Crea una cuenta de servicio para el escalador automático de Kafka:
gcloud iam service-accounts create SCALER_SERVICE_ACCOUNT
Sustituye SCALER_SERVICE_ACCOUNT por el nombre de la cuenta de servicio del escalador automático de Kafka.
El escalador automático de Kafka necesita los siguientes permisos para actualizar el número de instancias de consumidor de Kafka:
iam.serviceaccounts.actAs
para la cuenta de servicio del consumidor de Kafka.roles/artifactregistry.reader
del repositorio que contiene la imagen del consumidor de Kafka.run.workerpools.get
yrun.workerpools.update
. Estos permisos se incluyen en el rol Administrador de Cloud Run (roles/run.admin
).roles/secretmanager.secretAccessor
para los secretos de escalado y autenticación de Kafka.roles/monitoring.viewer
del proyecto del consumidor de Kafka. Este rol es necesario para leer las métricas de utilización de la CPU.roles/monitoring.metricWriter
del proyecto del consumidor de Kafka. Este rol es opcional, pero permite que la herramienta de escalado automático emita métricas personalizadas para mejorar la observabilidad.
gcloud iam service-accounts add-iam-policy-binding CONSUMER_SERVICE_ACCOUNT_EMAIL \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/iam.serviceAccountUser"
gcloud iam service-accounts add-iam-policy-binding CONSUMER_IMAGE_REPO \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/artifactregistry.reader" \
--location=REPO_REGION
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/run.admin"
gcloud secrets add-iam-policy-binding ADMIN_CLIENT_SECRET_NAME \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor"
gcloud secrets add-iam-policy-binding SCALING_CONFIG_SECRET_NAME \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor"
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/monitoring.viewer" \
--condition=None
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/monitoring.metricWriter" \
--condition=None
Haz los cambios siguientes:
- PROJECT_ID: el ID del proyecto en el que se encuentra el servicio de escalado automático de Kafka.
- CONSUMER_SERVICE_ACCOUNT_EMAIL: el correo de la cuenta de servicio del consumidor de Kafka. Por ejemplo,
example@PROJECT-ID.iam.gserviceaccount.com
. - SCALER_SERVICE_ACCOUNT: la cuenta de servicio del escalador automático de Kafka.
- ADMIN_CLIENT_SECRET_NAME: el nombre del secreto de autenticación de Kafka.
- SCALING_CONFIG_SECRET_NAME: el nombre del secreto de escalado.
- CONSUMER_IMAGE_REPO: el ID o el identificador completo del repositorio con la imagen de contenedor del consumidor de Kafka.
- REPO_REGION: la ubicación del repositorio de imágenes del consumidor.
Menos de un minuto
Configurar Cloud Tasks
Cloud Scheduler solo puede activarse a intervalos de un minuto o más. En el caso de los intervalos de menos de un minuto, usa Cloud Tasks para activar el escalador automático de Kafka. Para configurar Cloud Tasks, necesitas lo siguiente:
- Crear la cola de Cloud Tasks para las tareas de comprobación del autoescalado.
- Crear la cuenta de servicio que usa Cloud Tasks para invocar el escalador automático de Kafka con el rol Invocador de Cloud Run.
gcloud tasks queues create CLOUD_TASKS_QUEUE_NAME \
--location=REGION
gcloud iam service-accounts create TASKS_SERVICE_ACCOUNT
gcloud run services add-iam-policy-binding SCALER_SERVICE_NAME \
--member="serviceAccount:TASKS_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/run.invoker"
Haz los cambios siguientes:
- CLOUD_TASKS_QUEUE_NAME: la cola de Cloud Tasks configurada para activar comprobaciones de escalado automático.
- TASKS_SERVICE_ACCOUNT: la cuenta de servicio que debe usar Cloud Tasks para activar las comprobaciones de escalado automático.
- SCALER_SERVICE_NAME: el nombre de tu servicio de escalado automático de Kafka.
- PROJECT_ID: el ID del proyecto del servicio de escalado automático de Kafka.
- REGION: la ubicación del servicio de escalado automático de Kafka.
Configurar la cuenta de servicio del escalador automático de Kafka
Crea una cuenta de servicio para el escalador automático de Kafka:
gcloud iam service-accounts create SCALER_SERVICE_ACCOUNT
Sustituye SCALER_SERVICE_ACCOUNT por el nombre de la cuenta de servicio del escalador automático de Kafka.
Para actualizar el número de instancias de consumidor de Kafka y crear tareas para las comprobaciones de autoescalado, el autoescalador de Kafka necesita los siguientes permisos:
iam.serviceaccounts.actAs
para la cuenta de servicio del consumidor de Kafka.roles/artifactregistry.reader
del repositorio que contiene la imagen del consumidor de Kafkarun.workerpools.get
yrun.workerpools.update
. Estos permisos se incluyen en el rol Administrador de Cloud Run (roles/run.admin
).roles/secretmanager.secretAccessor
para ambos secretos de escalado y autenticación de Kafka.roles/monitoring.viewer
del proyecto del consumidor de Kafka. Este rol es necesario para leer las métricas de utilización de la CPU.roles/monitoring.metricWriter
del proyecto del consumidor de Kafka. Este rol es opcional, pero permite que la herramienta de escalado automático emita métricas personalizadas para mejorar la observabilidad.- Rol Cloud Tasks Enqueuer (
roles/cloudtasks.enqueuer
).
gcloud iam service-accounts add-iam-policy-binding CONSUMER_SERVICE_ACCOUNT_EMAIL \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/iam.serviceAccountUser"
gcloud iam service-accounts add-iam-policy-binding CONSUMER_IMAGE_REPO \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/artifactregistry.reader" \
--location=REPO_REGION
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/run.admin"
gcloud secrets add-iam-policy-binding ADMIN_CLIENT_SECRET_NAME \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor"
gcloud secrets add-iam-policy-binding SCALING_CONFIG_SECRET_NAME \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor"
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/monitoring.viewer" \
--condition=None
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/monitoring.metricWriter" \
--condition=None
gcloud tasks queues add-iam-policy-binding CLOUD_TASKS_QUEUE_NAME \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/cloudtasks.enqueuer" \
--location=REGION
Haz los cambios siguientes:
- PROJECT_ID: el ID del proyecto en el que se encuentra el servicio de escalado automático de Kafka.
- CONSUMER_SERVICE_ACCOUNT_EMAIL: el correo de la cuenta de servicio del consumidor de Kafka. Por ejemplo,
example@PROJECT_ID.iam.gserviceaccount.com
. - SCALER_SERVICE_ACCOUNT: la cuenta de servicio del escalador automático de Kafka.
- CONSUMER_IMAGE_REPO: el ID o el identificador completo del repositorio con la imagen de contenedor del consumidor de Kafka.
- ADMIN_CLIENT_SECRET_NAME: el nombre del secreto de autenticación de Kafka.
- SCALING_CONFIG_SECRET_NAME: el nombre del secreto de escalado.
- REPO_REGION: la ubicación del repositorio de imágenes del consumidor.
- CLOUD_TASKS_QUEUE_NAME: la cola de Cloud Tasks configurada para activar comprobaciones de escalado automático.
- REGION: la ubicación del servicio de escalado automático de Kafka.
Configurar variables de entorno
Uno o varios minutos
El escalador automático de Kafka usa variables de entorno para especificar el consumidor de Kafka y otros aspectos de la carga de trabajo de destino. Por motivos de seguridad, te recomendamos que configures la información sensible como secretos.
Crea un archivo YAML llamado scaler_env_vars.yaml
con las siguientes variables:
KAFKA_TOPIC_ID: KAFKA_TOPIC_ID CONSUMER_GROUP_ID: CONSUMER_GROUP_ID CYCLE_SECONDS: CYCLE_SECONDS OUTPUT_SCALER_METRICS: OUTPUT_SCALER_METRICS
Haz los cambios siguientes:
- KAFKA_TOPIC_ID: el ID del tema al que se suscriben los consumidores de Kafka.
- CONSUMER_GROUP_ID: el ID de grupo de consumidores que usa el consumidor de Kafka de destino. Estos valores deben coincidir o el ajuste de escala automático fallará.
- CYCLE_SECONDS: periodo del ciclo del escalador automático, en segundos.
- OUTPUT_SCALER_METRICS: el ajuste para habilitar las métricas. Asigne el valor
true
para habilitar la salida de métricas personalizadas ofalse
en caso contrario.
Menos de un minuto
El escalador automático de Kafka usa variables de entorno para especificar el consumidor de Kafka y otros aspectos de la carga de trabajo de destino. Por motivos de seguridad, te recomendamos que configures la información sensible como secretos.
Crea un archivo YAML llamado scaler_env_vars.yaml
con las siguientes variables:
KAFKA_TOPIC_ID: KAFKA_TOPIC_ID CONSUMER_GROUP_ID: CONSUMER_GROUP_ID CYCLE_SECONDS: CYCLE_SECONDS OUTPUT_SCALER_METRICS: OUTPUT_SCALER_METRICS FULLY_QUALIFIED_CLOUD_TASKS_QUEUE_NAME: CLOUD_TASKS_QUEUE_NAME INVOKER_SERVICE_ACCOUNT_EMAIL: TASKS_SERVICE_ACCOUNT_EMAIL
Haz los cambios siguientes:
- KAFKA_TOPIC_ID: el ID del tema al que se suscriben los consumidores de Kafka.
- CONSUMER_GROUP_ID: el ID de grupo de consumidores que usa el consumidor de Kafka de destino. Estos valores deben coincidir o el ajuste de escala automático fallará.
- CYCLE_SECONDS: periodo del ciclo del escalador automático, en segundos.
- OUTPUT_SCALER_METRICS: el ajuste para habilitar las métricas. Asigne el valor
true
para habilitar la salida de métricas personalizadas ofalse
en caso contrario. - CLOUD_TASKS_QUEUE_NAME: el nombre completo de la cola de Cloud Tasks
para activar las comprobaciones de escalado automático. Tiene el siguiente formato:
projects/$PROJECT_ID/locations/$REGION/queues/$CLOUD_TASKS_QUEUE_NAME
. - TASKS_SERVICE_ACCOUNT_EMAIL: la cuenta de servicio que debe usar Cloud Tasks para activar las comprobaciones de escalado automático. Por ejemplo,
example@PROJECT_ID.iam.gserviceaccount.com
.
Despliega el escalador automático de Kafka con la imagen proporcionada y conéctate a la VPC de Kafka con el archivo scaler_env_vars.yaml
y los montajes de volumen secreto:
gcloud run deploy SCALER_SERVICE_NAME \
--image=SCALER_IMAGE_URI \
--env-vars-file=scaler_env_vars.yaml \
--service-account=SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com \
--no-allow-unauthenticated \
--network=KAFKA_VPC_NETWORK \
--subnet=KAFKA_VPC_SUBNET \
--update-secrets=/kafka-config/kafka-client-properties=ADMIN_CLIENT_SECRET_NAME:latest \
--update-secrets=/scaler-config/scaling=SCALING_CONFIG_SECRET_NAME:latest
--labels=created-by=kafka-autoscaler
Haz los cambios siguientes:
- SCALER_IMAGE_URI: el URI de la imagen de la herramienta de escalado automático de Kafka.
- SCALER_SERVICE_NAME: el nombre de tu servicio de escalado automático de Kafka.
- SCALER_SERVICE_ACCOUNT: nombre de la cuenta de servicio de la herramienta de escalado automático de Kafka.
- PROJECT_ID: el ID del proyecto del servicio de escalado automático de Kafka.
- KAFKA_VPC_NETWORK: la red VPC conectada al clúster de Kafka.
- KAFKA_VPC_SUBNET: la subred de VPC conectada al clúster de Kafka.
- ADMIN_CLIENT_SECRET_NAME: el nombre del secreto de autenticación de Kafka.
- SCALING_CONFIG_SECRET_NAME: el nombre del secreto de escalado.
Configurar comprobaciones periódicas del autoescalado
En esta sección, usarás Cloud Scheduler para activar comprobaciones periódicas del escalado automático:
- Un minuto o más: configura Cloud Scheduler para que se active en el intervalo seleccionado.
- Menos de un minuto: configura Cloud Scheduler para que se active cada minuto
Crear una cuenta de servicio de invocador
Para que Cloud Scheduler pueda llamar al escalador automático de Kafka, debes crear una cuenta de servicio con el rol Invoker (roles/run.invoker
) en el servicio del escalador automático de Kafka:
gcloud iam service-accounts create SCALER_INVOKER_SERVICE_ACCOUNT
gcloud run services add-iam-policy-binding SCALER_SERVICE_NAME \
--member="serviceAccount:SCALER_INVOKER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/run.invoker"
Haz los cambios siguientes:
- SCALER_SERVICE_NAME: el nombre de tu servicio de escalado automático de Kafka.
- SCALER_INVOKER_SERVICE_ACCOUNT: el nombre de la cuenta de servicio de invocación.
- PROJECT_ID: el ID del proyecto del servicio de escalado automático de Kafka.
Crear tarea de Cloud Scheduler
Uno o varios minutos
Crea una tarea de Cloud Scheduler con el intervalo de comprobación de autoescalado seleccionado:
gcloud scheduler jobs create http kafka-scaling-check \
--location=REGION \
--schedule="CRON_SCHEDULE" \
--time-zone="TIMEZONE" \
--uri=https://SCALER_SERVICE_NAME-PROJECT_NUMBER.REGION.run.app \
--oidc-service-account-email=SCALER_INVOKER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com \
--http-method=POST
Haz los cambios siguientes:
- SCALER_SERVICE_NAME: el nombre de tu servicio de escalado automático de Kafka.
- SCALER_INVOKER_SERVICE_ACCOUNT: el nombre de la cuenta de servicio de invocación.
- PROJECT_ID: el ID del proyecto o el servicio de escalado automático de Kafka.
- PROJECT_NUMBER: número de proyecto del servicio de escalado automático de Kafka.
- REGION: la ubicación del servicio de escalado automático de Kafka.
- TIMEZONE: la zona horaria, por ejemplo,
America/Los_Angeles
. - CRON_SCHEDULE: la programación seleccionada en formato Crontab. Por ejemplo, para cada minuto:
"* * * * *"
.
Menos de un minuto
Crea una tarea de Cloud Scheduler que se ejecute cada minuto:
gcloud scheduler jobs create http kafka-scaling-check \
--location=REGION \
--schedule="* * * * *" \
--time-zone="TIMEZONE" \
--uri=https://SCALER_SERVICE_NAME-PROJECT_NUMBER.REGION.run.app \
--oidc-service-account-email=SCALER_INVOKER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com \
--http-method=POST
Haz los cambios siguientes:
- SCALER_SERVICE_NAME: el nombre de tu servicio de escalado automático de Kafka.
- SCALER_INVOKER_SERVICE_ACCOUNT: el nombre de la cuenta de servicio de invocación.
- PROJECT_ID: el ID de proyecto del servicio de escalado automático de Kafka.
- PROJECT_NUMBER: número de proyecto del servicio de escalado automático de Kafka.
- REGION: la ubicación del servicio de escalado automático de Kafka.
- TIMEZONE: la zona horaria, por ejemplo,
America/Los_Angeles
.
terraform
El directorio terraform/
contiene un módulo de Terraform reutilizable que puedes usar para aprovisionar el escalador automático de Kafka y sus recursos asociados.
Este módulo automatiza la creación de lo siguiente:
- El servicio de Cloud Run de escalado automático de Kafka
- Admite cuentas de servicio y vinculaciones de gestión de identidades y accesos
- Cola de Cloud Tasks
- Tarea de Cloud Scheduler
Para obtener instrucciones detalladas, ejemplos de uso y descripciones de todas las variables de entrada y salida, consulta la terraform readme
.
Debe proporcionar las variables necesarias al módulo de Terraform, incluidos los detalles de los requisitos previos, como el ID del proyecto, la región, el correo de la SA del consumidor, los nombres de los secretos, la ruta de la imagen del escalador y el ID del tema.
shell
Se proporciona una setup_kafka_scaler.sh
secuencia de comandos con la herramienta de escalado automático para crear y configurar automáticamente todos los recursos necesarios.
Establece variables de entorno:
Antes de ejecutar la secuencia de comandos, asegúrate de haber definido todas las variables de entorno necesarias:
# Details for already-deployed Kafka consumer
export PROJECT_ID=PROJECT_ID
export REGION=REGION
export CONSUMER_SERVICE_NAME=DEPLOYED_KAFKA_CONSUMER
export CONSUMER_SA_EMAIL=KAFKA_CONSUMER_ACCOUNT_EMAIL # For example, NAME@PROJECT_ID.iam.gserviceaccount.com
export TOPIC_ID=KAFKA_TOPIC_ID
export CONSUMER_GROUP_ID=KAFKA_CONSUMER_GROUP_ID
export NETWORK=VPC_NETWORK
export SUBNET=VPC_SUBNET
# Details for new items to be created during this setup
export CLOUD_TASKS_QUEUE_NAME=CLOUD_TASKS_QUEUE_FOR_SCALING_CHECKS
export TASKS_SERVICE_ACCOUNT=TASKS_SERVICE_ACCOUNT_NAME
export SCALER_SERVICE_NAME=KAFKA_AUTOSCALER_SERVICE_NAME
export SCALER_IMAGE_PATH=KAFKA_AUTOSCALER_IMAGE_URI
export SCALER_CONFIG_SECRET=KAFKA_AUTOSCALER_CONFIG_SECRET_NAME
export CYCLE_SECONDS=SCALER_CHECK_FREQUENCY # For example, 15; this value should be at least 5 seconds.
export OUTPUT_SCALER_METRICS=false # If you want scaling metrics to outputted to Cloud Monitoring set this to true and ensure your scaler service account has permission to write metrics (for example, via roles/monitoring.metricWriter).
Haz los cambios siguientes:
- PROJECT_ID: el ID del proyecto en el que se encuentra el servicio de escalado automático de Kafka.
- REGION: la ubicación del servicio de escalado automático de Kafka.
- DEPLOYED_KAFKA_CONSUMER: nombre del consumidor de Kafka.
- KAFKA_CONSUMER_ACCOUNT_EMAIL: el correo de la cuenta de servicio del consumidor de Kafka.
- KAFKA_TOPIC_ID: el ID del tema al que se suscriben los consumidores de Kafka.
- KAFKA_CONSUMER_GROUP_ID: el ID de grupo de consumidores que usa el consumidor de Kafka de destino. Estos valores deben coincidir o el ajuste de escala automático fallará.
- VPC_NETWORK: la red de VPC conectada al clúster de Kafka.
- VPC_SUBNET: la subred de VPC conectada al clúster de Kafka.
- CLOUD_TASKS_QUEUE_FOR_SCALING_CHECKS: la cola de Cloud Tasks configurada para activar comprobaciones de escalado automático.
- TASKS_SERVICE_ACCOUNT_NAME: la cuenta de servicio que debe usar Cloud Tasks para activar las comprobaciones de escalado automático.
- KAFKA_AUTOSCALER_SERVICE_NAME: el nombre de tu servicio de escalado automático de Kafka.
- KAFKA_AUTOSCALER_IMAGE_URI: el URI de la imagen de la herramienta de escalado automático de Kafka.
- KAFKA_AUTOSCALER_CONFIG_SECRET_NAME: el nombre del secreto de escalado.
- SCALER_CHECK_FREQUENCY: periodo del ciclo del escalador automático, en segundos.
Ejecutar la secuencia de comandos de configuración
Ejecuta la secuencia de comandos setup_kafka_scaler.sh
proporcionada:
./setup_kafka_scaler.sh
La secuencia de comandos realiza estas acciones:
- Crea la cola de Cloud Tasks que se usa para activar las comprobaciones de autoescalado.
- Crea la cuenta de servicio de la herramienta de escalado automático de Kafka y otorga los permisos necesarios.
- Configura y despliega el autoescalador de Kafka.
- Crea la tarea de Cloud Scheduler que activa periódicamente las comprobaciones de escalado automático.
Cuando se ejecuta la secuencia de comandos setup_kafka_scaler.sh
, muestra las variables de entorno configuradas. Verifica que las variables de entorno sean correctas antes de continuar.
Concede permisos adicionales
Para cambiar el número de instancias del consumidor de Kafka, la cuenta de servicio del escalador automático de Kafka debe tener permiso de lectura en la imagen del contenedor desplegado. Por ejemplo, si la imagen de consumidor se ha desplegado desde Artifact Registry, ejecuta el siguiente comando:
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SCALER_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/artifactregistry.reader" # Or appropriate role for your registry
Verificar que el escalado automático de Kafka funciona
El escalado del servicio de escalado automático de Kafka se activa con una solicitud a la URL del servicio (SCALER_SERVICE_NAME-
PROJECT_NUMBER.
REGION.run.app
).
Puedes enviar una solicitud POST
al servicio de escalado automático de Kafka para activar el cálculo del escalado automático:
curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" https://SCALER_SERVICE_NAME-PROJECT_NUMBER.REGION.run.app
Haz los cambios siguientes:
- SCALER_SERVICE_NAME: el nombre de tu servicio de escalado automático de Kafka.
- PROJECT_NUMBER: número de proyecto del servicio de escalado automático de Kafka.
- REGION: la ubicación del servicio de escalado automático de Kafka.
Las solicitudes POST
activan el cálculo del autoescalado, que se registra, y cambian el número de instancias según la recomendación.
Los registros de tu servicio de escalado automático de Kafka deben incluir mensajes como [SCALING] Recommended instances X
.
Si la marca OUTPUT_SCALER_METRICS
está habilitada, también puede encontrar métricas de Cloud Monitoring escalares en custom.googleapis.com/cloud-run-kafkascaler
.
Configuración avanzada del escalado
spec: metrics: behavior: scaleDown: stabilizationWindowSeconds: [INT] policies: - type: [Percent, Instances] value: [INT] periodSeconds: [INT] selectPolicy: [Min, Max] scaleUp: stabilizationWindowSeconds: [INT] policies: - type: [Percent, Instances] value: [INT] periodSeconds: [INT] selectPolicy: [Min, Max]
En la siguiente lista se describen algunos de los elementos anteriores:
scaleDown
: el comportamiento al reducir el número de instancias (reducción de escala).scaleUp
: el comportamiento al aumentar el número de instancias (escalado vertical).stabilizationWindowSeconds
: el más alto (scaleDown
) o el más bajo (scaleUp
). Número de instancias calculado en un periodo continuo. Si se asigna el valor0
, se usará el valor calculado más reciente.selectPolicy
: el resultado que se debe aplicar cuando se configuran varias políticas.Min
: el cambio más pequeñoMax
: el mayor cambioPercent
: los cambios por periodo se limitan al porcentaje configurado del total de instancias.Instances
: los cambios por periodo se limitan al número de instancias configurado.periodSeconds
: el periodo durante el que se aplica la política.
Por ejemplo, la especificación completa con la configuración predeterminada tiene el siguiente aspecto:
spec: scaleTargetRef: name: projects/PROJECT-ID/locations/us-central1/workerpools/kafka-consumer-worker metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 60 activationThreshold: 0 tolerance: 0.1 windowSeconds: 120 - type: External external: metric: name: consumer_lag target: type: AverageValue averageValue: 1000 activationThreshold: 0 tolerance: 0.1 behavior: scaleDown: stabilizationWindowSeconds: 300 policies: - type: Percent value: 50 periodSeconds: 30 selectPolicy: Min scaleUp: stabilizationWindowSeconds: 0 policies: - type: Percent value: 100 periodSeconds: 15 - type: Instances value: 4 periodSeconds: 15 selectPolicy: Max