En este instructivo, se muestra cómo configurar e implementar un escalador automático de Kafka como un servicio de Cloud Run. Este escalador automático realiza la lógica de ajuste de escala para una carga de trabajo de consumidor de Kafka, como una implementación de grupo de trabajadores de Cloud Run. El escalador automático de Kafka lee las métricas de tu clúster de Kafka y usa el ajuste de escala manual para un grupo de trabajadores o un servicio de Cloud Run para ajustar una carga de trabajo de consumidor de Kafka en función de la métrica de rezago del consumidor de Kafka.
En el siguiente diagrama, se muestra cómo un servicio de escalador 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, pídele a tu administrador que te otorgue los siguientes roles de IAM:
- 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 el trabajo de Cloud Scheduler que active las verificaciones de ajuste de escala automático - Administrador de elementos en cola de Cloud Tasks (
roles/cloudtasks.queueAdmin
) para crear la cola de Cloud Tasks para las verificaciones de ajuste de escala automático - Administrador de seguridad (
roles/iam.securityAdmin
) para otorgar permisos a las cuentas de servicio
Antes de comenzar
Para configurar y usar el escalador automático de Kafka, necesitas los siguientes recursos.
- Clúster de Kafka
- Consumidor implementado
Clúster de Kafka
- Un clúster de Kafka debe ejecutarse en Compute Engine, Google Kubernetes Engine o el Servicio administrado para Apache Kafka.
- Un tema de Kafka configurado, con eventos que se publican en ese tema.
Consumidor de Cloud Run implementado
- Una carga de trabajo de consumidor de Kafka debe implementarse 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 Ejemplo de consumidor del ajustador de escala automático 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 con la VPC directa. La VPC directa te permite conectarte a tu clúster de Kafka con direcciones IP privadas y mantener el tráfico en tu red de VPC.
- Configura una verificación de estado de actividad para tus consumidores de Kafka que verifique si el consumidor está recuperando eventos. La verificación de estado ayuda a garantizar que las instancias en mal estado se reinicien automáticamente si dejan de procesar eventos, incluso si el contenedor no falla.
Compila el escalador automático 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
Navega a la carpeta del repositorio:
cd cloud-run-kafka-scaler
Para especificar el nombre de la imagen de salida, actualiza %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 compila la imagen de contenedor y la envía a Artifact Registry. Registra la ruta de acceso completa de la imagen (SCALER_IMAGE_PATH
), ya que la necesitarás más adelante.
Ten en cuenta que la imagen resultante no se ejecutará de forma local. Se diseñó para colocarse sobre una imagen base de Java. Para obtener más información, incluido cómo volver a ensamblar la imagen de contenedor para ejecutarla de forma local, consulta Configura actualizaciones automáticas de imágenes base.
Define la configuración del escalador automático de Kafka
Puedes configurar el escalador automático de Kafka con secretos. El escalador automático actualiza su configuración periódicamente, lo que significa que puedes enviar nuevas versiones de secretos para cambiar la configuración sin necesidad de volver a implementar el escalador automático.
Configura las propiedades del cliente de Kafka
Puedes configurar la conexión a la API de Kafka Admin si activas un secreto como volumen cuando implementas el escalador automático de Kafka.
Crea un archivo llamado kafka_client_config.txt
y agrega las propiedades de configuración del cliente de administrador de Kafka que desees incluir. La propiedad bootstrap.servers
es obligatoria:
bootstrap.servers=BOOTSTRAP_SERVER_LIST
Reemplaza BOOTSTRAP_SERVER_LIST por la lista HOST:PORT
del clúster de Kafka.
Configura la autenticación de Kafka
Si tu servidor de Kafka requiere autenticación, incluye las propiedades de configuración necesarias en el archivo kafka_client_config.txt
. Por ejemplo, para conectarte a un clúster de Managed Service para Apache Kafka con 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;
Reemplaza BOOTSTRAP_SERVER_LIST por la lista HOST:PORT
del clúster de Kafka.
El uso de credenciales predeterminadas de la aplicación con un clúster de Managed Service para Apache Kafka también requiere que se otorgue el rol de cliente de Kafka administrado (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"
Reemplaza lo siguiente:
- SCALER_SERVICE_ACCOUNT: Es el nombre de la cuenta de servicio del escalador automático de Kafka.
- PROJECT_ID: Es el ID del proyecto para el servicio de escalador automático de Kafka.
Para crear el secreto, que se activará como un volumen durante la implementación, usa el archivo kafka_client_config.txt
:
gcloud secrets create ADMIN_CLIENT_SECRET_NAME --data-file=kafka_client_config.txt
Reemplaza ADMIN_CLIENT_SECRET_NAME por el nombre del secreto de autenticación de Kafka.
Configura el escalamiento
El escalador automático de Kafka lee su configuración de escalamiento desde el 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
Reemplaza lo siguiente:
- PROJECT_ID: Es el ID del proyecto de la carga de trabajo del consumidor de Kafka que se ajustará automáticamente.
- REGION: Es la región de la carga de trabajo del consumidor de Kafka que se ajustará automáticamente.
- CONSUMER_SERVICE_NAME: Es el nombre de la carga de trabajo del consumidor de Kafka que se ajustará automáticamente.
- TARGET_CPU_UTILIZATION: Es el uso de CPU objetivo para los cálculos de ajuste de escala automático; por ejemplo,
60
. - LAG_THRESHOLD: Es el umbral de la métrica
consumer_lag
para activar el ajuste de escala automático, por ejemplo,1000
. - (Opcional) CPU_ACTIVATION_THRESHOLD: Es el umbral de activación de la CPU. Cuando todas las métricas están inactivas, el público objetivo se reduce a cero. La configuración predeterminada es
0
. - (Opcional) CPU_TOLERANCE: Es un umbral que evita los cambios de ajuste si se encuentra dentro del rango especificado. Se expresa como un porcentaje del uso de CPU objetivo. La configuración predeterminada es
0.1
. - (Opcional) CPU_METRIC_WINDOW: Es un período, en segundos, durante el cual se calcula el uso promedio de la CPU. La configuración predeterminada es
120
. - (Opcional) LAG_ACTIVATION_THRESHOLD: Es el umbral de activación para la métrica
consumer_lag
. Cuando todas las métricas están inactivas, el público objetivo se reduce a cero. La configuración predeterminada es0
. - (Opcional) LAG_TOLERANCE: Es un umbral que evita los cambios de ajuste si se encuentra dentro del rango especificado. Se expresa como un porcentaje del rezago del consumidor objetivo. La configuración predeterminada es
0.1
.
De manera opcional, puedes configurar propiedades de escalamiento avanzadas con un bloque behavior:
.
Este bloque admite muchas de las mismas propiedades que las políticas de ajuste de escala del HPA de Kubernetes.
Si no especificas un bloque behavior
, se usa 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 Secret, que se activará en deployment, copia la configuración en un archivo llamado scaling_config.yaml
y, luego, ejecuta lo siguiente:
gcloud secrets create SCALING_CONFIG_SECRET_NAME --data-file=scaling_config.yaml
Reemplaza SCALING_CONFIG_SECRET_NAME por el nombre del secreto de ajuste de escala.
Implementa el escalador automático de Kafka
Después de completar los requisitos previos, puedes implementar el servicio de escalador automático de Kafka y su infraestructura de asistencia. Se proporcionan un módulo de Terraform y una secuencia de comandos de shell para simplificar este proceso.
gcloud
En esta sección, se explican todos los comandos de gcloud necesarios para implementar el escalador automático de forma manual. En la mayoría de los casos, recomendamos usar el secuencia de comandos de shell o el módulo de Terraform.
Crea una cuenta de servicio
Los requisitos de la cuenta de servicio dependen del intervalo de verificación del ajuste de escala automático que configuraste. Puedes configurar el escalador automático de Kafka para que realice verificaciones de ajuste de escala automático en intervalos flexibles:
- Un minuto o más: Cloud Scheduler activa la verificación del ajuste de escala 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 Tasks cada minuto, según la frecuencia configurada.
Uno o más minutos
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
Reemplaza 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 la cantidad de instancias de consumidores de Kafka:
iam.serviceaccounts.actAs
para la cuenta de servicio del consumidor de Kafkaroles/artifactregistry.reader
para el repositorio que contiene la imagen del consumidor de Kafka.run.workerpools.get
yrun.workerpools.update
. Estos permisos se incluyen en el rol de administrador de Cloud Run (roles/run.admin
).roles/secretmanager.secretAccessor
para los secretos de autenticación de Kafka y de escalamiento.roles/monitoring.viewer
para el proyecto de consumidor de Kafka. Este rol es necesario para leer las métricas de uso de CPU.roles/monitoring.metricWriter
para el proyecto de consumidor de Kafka. Este rol es opcional, pero permite que el escalador automático emita métricas personalizadas para una mejor 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
Reemplaza lo siguiente:
- PROJECT_ID: Es el ID del proyecto en el que se encuentra el servicio de escalador automático de Kafka.
- CONSUMER_SERVICE_ACCOUNT_EMAIL: Es el correo electrónico de la cuenta de servicio del consumidor de Kafka. Por ejemplo,
example@PROJECT-ID.iam.gserviceaccount.com
. - SCALER_SERVICE_ACCOUNT: Es la cuenta de servicio del escalador automático de Kafka.
- ADMIN_CLIENT_SECRET_NAME: Es el nombre del secreto de autenticación de Kafka.
- SCALING_CONFIG_SECRET_NAME: Es el nombre del secreto de ajuste de escala.
- CONSUMER_IMAGE_REPO: Es el ID o el identificador completamente calificado del repositorio con la imagen de contenedor para el consumidor de Kafka.
- REPO_REGION: Es la ubicación del repositorio de imágenes del consumidor.
Menos de un minuto
Configura Cloud Tasks
Cloud Scheduler solo puede activarse en intervalos de un minuto o más. Para los intervalos de menos de un minuto, usa Cloud Tasks para activar el ajuste de escala automático de Kafka. Para configurar Cloud Tasks, se requiere lo siguiente:
- Crea la cola de Cloud Tasks para las tareas de verificación del ajuste de escala automático.
- Crea la cuenta de servicio que Cloud Tasks usa para invocar el autoescalador de Kafka con el rol de Cloud Run Invoker.
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"
Reemplaza lo siguiente:
- CLOUD_TASKS_QUEUE_NAME: Es la cola de Cloud Tasks configurada para activar las verificaciones de ajuste de escala automático.
- TASKS_SERVICE_ACCOUNT: Es la cuenta de servicio que Cloud Tasks debe usar para activar las verificaciones de ajuste automático de escala.
- SCALER_SERVICE_NAME: Es el nombre de tu servicio de escalador automático de Kafka.
- PROJECT_ID: Es el ID del proyecto para el servicio de escalador automático de Kafka.
- REGION: Es la ubicación del servicio de escalador automático de Kafka.
Configura 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
Reemplaza SCALER_SERVICE_ACCOUNT por el nombre de la cuenta de servicio del escalador automático de Kafka.
Para actualizar la cantidad de instancias de consumidor de Kafka y crear tareas para las verificaciones del ajuste de escala automático, el ajustador de escala automático de Kafka necesita los siguientes permisos:
iam.serviceaccounts.actAs
para la cuenta de servicio del consumidor de Kafkaroles/artifactregistry.reader
para el repositorio que contiene la imagen del consumidor de Kafkarun.workerpools.get
yrun.workerpools.update
. Estos permisos se incluyen en el rol de administrador de Cloud Run (roles/run.admin
).roles/secretmanager.secretAccessor
para ambos secretos de autenticación de Kafka y de ajuste de escala.roles/monitoring.viewer
para el proyecto de consumidor de Kafka. Este rol es necesario para leer las métricas de uso de CPU.roles/monitoring.metricWriter
para el proyecto de consumidor de Kafka. Este rol es opcional, pero permite que el escalador automático emita métricas personalizadas para una mejor observabilidad.- Rol de 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
Reemplaza lo siguiente:
- PROJECT_ID: Es el ID del proyecto en el que se encuentra el servicio de escalador automático de Kafka.
- CONSUMER_SERVICE_ACCOUNT_EMAIL: Es el correo electrónico de la cuenta de servicio del consumidor de Kafka. Por ejemplo,
example@PROJECT_ID.iam.gserviceaccount.com
. - SCALER_SERVICE_ACCOUNT: Es la cuenta de servicio del escalador automático de Kafka.
- CONSUMER_IMAGE_REPO: Es el ID o el identificador completamente calificado del repositorio con la imagen del contenedor para el consumidor de Kafka.
- ADMIN_CLIENT_SECRET_NAME: Es el nombre del secreto de autenticación de Kafka.
- SCALING_CONFIG_SECRET_NAME: Es el nombre del secreto de ajuste de escala.
- REPO_REGION: Es la ubicación del repositorio de imágenes del consumidor.
- CLOUD_TASKS_QUEUE_NAME: Es la cola de Cloud Tasks configurada para activar las verificaciones de ajuste de escala automático.
- REGION: Es la ubicación del servicio de escalador automático de Kafka.
Configure las variables de entorno
Uno o más 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 objetivo. 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
Reemplaza lo siguiente:
- KAFKA_TOPIC_ID: Es el ID del tema al que se suscriben los consumidores de Kafka.
- CONSUMER_GROUP_ID: Es el ID del 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: Es el período del ciclo del escalador automático, en segundos.
- OUTPUT_SCALER_METRICS: Es el parámetro de configuración para habilitar las métricas. Establece el valor en
true
para habilitar el resultado de las métricas personalizadas o enfalse
para inhabilitarlo.
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 objetivo. 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
Reemplaza lo siguiente:
- KAFKA_TOPIC_ID: Es el ID del tema al que se suscriben los consumidores de Kafka.
- CONSUMER_GROUP_ID: Es el ID del 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: Es el período del ciclo del escalador automático, en segundos.
- OUTPUT_SCALER_METRICS: Es el parámetro de configuración para habilitar las métricas. Establece el valor en
true
para habilitar la salida de métricas personalizadas o enfalse
para inhabilitarla. - CLOUD_TASKS_QUEUE_NAME: Es el nombre completamente calificado de la cola de Cloud Tasks para activar las verificaciones de ajuste de escala automático. Tiene el siguiente formato:
projects/$PROJECT_ID/locations/$REGION/queues/$CLOUD_TASKS_QUEUE_NAME
. - TASKS_SERVICE_ACCOUNT_EMAIL: Es la cuenta de servicio que Cloud Tasks debe usar para activar las verificaciones de ajuste automático de escala. Por ejemplo,
example@PROJECT_ID.iam.gserviceaccount.com
.
Implementa 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 volúmenes secretos montados:
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
Reemplaza lo siguiente:
- SCALER_IMAGE_URI: Es el URI de la imagen del escalador automático de Kafka.
- SCALER_SERVICE_NAME: Es el nombre de tu servicio de escalador automático de Kafka.
- SCALER_SERVICE_ACCOUNT: Es el nombre de la cuenta de servicio del escalador automático de Kafka.
- PROJECT_ID: Es el ID del proyecto para el servicio de escalador automático de Kafka.
- KAFKA_VPC_NETWORK: Es la red de VPC que está conectada al clúster de Kafka.
- KAFKA_VPC_SUBNET: Es la subred de VPC que está conectada al clúster de Kafka.
- ADMIN_CLIENT_SECRET_NAME: Es el nombre del secreto de autenticación de Kafka.
- SCALING_CONFIG_SECRET_NAME: Es el nombre del secreto de ajuste de escala.
Configura verificaciones periódicas del ajuste de escala automático
En esta sección, usarás Cloud Scheduler para activar verificaciones periódicas del ajuste de escala 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
Crea la cuenta de servicio del invocador
Para permitir que Cloud Scheduler llame al ajuste de escala automático de Kafka, debes crear una cuenta de servicio con el rol de invocador (roles/run.invoker
) en el servicio de ajuste de escala 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"
Reemplaza lo siguiente:
- SCALER_SERVICE_NAME: Es el nombre de tu servicio de escalador automático de Kafka.
- SCALER_INVOKER_SERVICE_ACCOUNT: Es el nombre de la cuenta de servicio del invocador.
- PROJECT_ID: Es el ID del proyecto para el servicio de escalador automático de Kafka.
Crea un trabajo de Cloud Scheduler
Uno o más minutos
Crea un trabajo de Cloud Scheduler con el intervalo de verificación de ajuste de escala automático 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
Reemplaza lo siguiente:
- SCALER_SERVICE_NAME: Es el nombre de tu servicio de escalador automático de Kafka.
- SCALER_INVOKER_SERVICE_ACCOUNT: Es el nombre de la cuenta de servicio del invocador.
- PROJECT_ID: Es el ID del proyecto o el servicio de escalador automático de Kafka.
- PROJECT_NUMBER: Es el número de proyecto del servicio de escalador automático de Kafka.
- REGION: Es la ubicación del servicio de escalador automático de Kafka.
- TIMEZONE: La zona horaria, por ejemplo,
America/Los_Angeles
. - CRON_SCHEDULE: Es el programa seleccionado en formato Crontab. Por ejemplo, para cada minuto:
"* * * * *"
.
Menos de un minuto
Crea un trabajo 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
Reemplaza lo siguiente:
- SCALER_SERVICE_NAME: Es el nombre de tu servicio de escalador automático de Kafka.
- SCALER_INVOKER_SERVICE_ACCOUNT: Es el nombre de la cuenta de servicio del invocador.
- PROJECT_ID: Es el ID del proyecto del servicio de escalador automático de Kafka.
- PROJECT_NUMBER: Es el número de proyecto del servicio de escalador automático de Kafka.
- REGION: Es la ubicación del servicio de escalador 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:
- Servicio de Cloud Run del ajustador de escala automático de Kafka
- Compatibilidad con cuentas de servicio y vinculaciones de IAM
- Lista de tareas en cola de Cloud Tasks
- Trabajo de Cloud Scheduler
Para obtener instrucciones detalladas, ejemplos de uso y descripciones de todas las variables de entrada y salida, consulta terraform readme
.
Debes 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 electrónico de la SA del consumidor, los nombres de los secretos, la ruta de acceso a la imagen del escalador y el ID del tema.
shell
Se proporciona una secuencia de comandos setup_kafka_scaler.sh
con el escalador automático para crear y configurar automáticamente todos los recursos necesarios.
Configure las variables de entorno
Antes de ejecutar la secuencia de comandos, asegúrate de haber configurado todas las variables de entorno requeridas:
# 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).
Reemplaza lo siguiente:
- PROJECT_ID: Es el ID del proyecto en el que se encuentra el servicio de escalador automático de Kafka.
- REGION: Es la ubicación del servicio de escalador automático de Kafka.
- DEPLOYED_KAFKA_CONSUMER: Es el nombre del consumidor de Kafka.
- KAFKA_CONSUMER_ACCOUNT_EMAIL: Es el correo electrónico de la cuenta de servicio del consumidor de Kafka.
- KAFKA_TOPIC_ID: Es el ID del tema al que se suscriben los consumidores de Kafka.
- KAFKA_CONSUMER_GROUP_ID: Es el ID del 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: Es la red de VPC conectada al clúster de Kafka.
- VPC_SUBNET: Es la subred de VPC que está conectada al clúster de Kafka.
- CLOUD_TASKS_QUEUE_FOR_SCALING_CHECKS: Es la cola de Cloud Tasks configurada para activar las verificaciones de ajuste de escala automático.
- TASKS_SERVICE_ACCOUNT_NAME: Es la cuenta de servicio que Cloud Tasks debe usar para activar las verificaciones de ajuste automático de escala.
- KAFKA_AUTOSCALER_SERVICE_NAME: Es el nombre de tu servicio de escalador automático de Kafka.
- KAFKA_AUTOSCALER_IMAGE_URI: Es el URI de la imagen del escalador automático de Kafka.
- KAFKA_AUTOSCALER_CONFIG_SECRET_NAME: Es el nombre del secreto de ajuste de escala.
- SCALER_CHECK_FREQUENCY: Es el período del ciclo del escalador automático, en segundos.
Ejecuta 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 las siguientes acciones:
- Crea la cola de Cloud Tasks que se usa para activar las verificaciones de ajuste de escala automático.
- Crea la cuenta de servicio del escalador automático de Kafka y otorga los permisos necesarios.
- Configura y, luego, implementa el escalador automático de Kafka.
- Crea el trabajo de Cloud Scheduler que activa periódicamente las verificaciones del ajuste de escala automático.
Cuando se ejecuta la secuencia de comandos setup_kafka_scaler.sh
, se generan las variables de entorno configuradas. Verifica que las variables de entorno sean correctas antes de continuar.
Otorga permisos adicionales
Para cambiar el recuento de instancias del consumidor de Kafka, la cuenta de servicio del escalador automático de Kafka debe tener permiso de visualización en la imagen del contenedor implementado. Por ejemplo, si la imagen del consumidor se implementó 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
Verifica que el ajuste de escala automático de Kafka funcione
El ajuste de escala del servicio de ajuste de escala 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 ajuste de escala automático de Kafka para activar el cálculo del ajuste de escala automático:
curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" https://SCALER_SERVICE_NAME-PROJECT_NUMBER.REGION.run.app
Reemplaza lo siguiente:
- SCALER_SERVICE_NAME: Es el nombre de tu servicio de escalador automático de Kafka.
- PROJECT_NUMBER: Es el número de proyecto del servicio de escalador automático de Kafka.
- REGION: Es la ubicación del servicio de escalador automático de Kafka.
Las solicitudes de POST
activan el cálculo del ajuste de escala automático, se registran en el registro, y cambian el recuento de instancias según la recomendación.
Los registros de tu servicio de ajuste de escala automático de Kafka deben incluir mensajes como [SCALING] Recommended instances X
.
Si la marca OUTPUT_SCALER_METRICS
está habilitada, también puedes encontrar las métricas de Cloud Monitoring del escalador en custom.googleapis.com/cloud-run-kafkascaler
.
Configuración avanzada del escalamiento
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
: Es el comportamiento cuando se reduce la cantidad de instancias (reducción del escalamiento).scaleUp
: Es el comportamiento cuando se aumenta la cantidad de instancias (escalamiento vertical).stabilizationWindowSeconds
: La cantidad de instancias calculada más alta (scaleDown
) o más baja (scaleUp
) durante un período continuo. Si se establece el valor en0
, se usará el valor calculado más reciente.selectPolicy
: Es el resultado que se debe aplicar cuando se configuran varias políticas.Min
: El cambio más pequeñoMax
: El cambio más grandePercent
: Los cambios por período se limitan al porcentaje configurado de instancias totales.Instances
: Los cambios por período se limitan a la cantidad configurada de instancias.periodSeconds
: Es el período durante el cual se aplica la política.
Por ejemplo, la especificación completa, con la configuración predeterminada, se ve de la siguiente manera:
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