Ce tutoriel vous explique comment configurer et déployer un autoscaler Kafka en tant que service Cloud Run. Cet autoscaler effectue une logique de scaling pour une charge de travail de consommateur Kafka, telle qu'un déploiement de pool de nœuds de calcul Cloud Run. L'autoscaler Kafka lit les métriques de votre cluster Kafka et utilise le scaling manuel pour un pool de workers ou un service Cloud Run afin de faire évoluer une charge de travail de consommateur Kafka en fonction de la métrique de décalage du consommateur Kafka.
Le schéma suivant montre comment un service d'autoscaler Kafka lit les métriques d'un cluster Kafka pour effectuer l'autoscaling d'un pool de nœuds de calcul consommateur Kafka.
Rôles requis
Pour obtenir les autorisations nécessaires pour déployer et exécuter ce service, demandez à votre administrateur de vous accorder les rôles IAM suivants :
- Développeur Cloud Run (
roles/run.developer
) - Utilisateur du compte de service (
roles/iam.serviceAccountUser
) - Lecteur Artifact Registry (
roles/artifactregistry.reader
) - Administrateur Cloud Scheduler (
roles/cloudscheduler.admin
) pour créer le job Cloud Scheduler qui déclenche les vérifications de l'autoscaling - Administrateur de files d'attente Cloud Tasks (
roles/cloudtasks.queueAdmin
) pour créer la file d'attente Cloud Tasks pour les vérifications de l'autoscaling - Administrateur de la sécurité (
roles/iam.securityAdmin
) pour accorder des autorisations aux comptes de service
Avant de commencer
Pour configurer et utiliser l'autoscaler Kafka, vous devez disposer des ressources suivantes.
- Cluster Kafka
- Consommateur déployé
Cluster Kafka
- Un cluster Kafka doit être en cours d'exécution sur Compute Engine, Google Kubernetes Engine ou le Managed Service pour Apache Kafka.
- Un sujet Kafka configuré avec des événements publiés dans ce sujet.
Consommateur Cloud Run déployé
- Une charge de travail de consommateur Kafka doit être déployée sur Cloud Run en tant que service ou pool de nœuds de calcul. Il doit être configuré pour se connecter à votre cluster, sujet et groupe de consommateurs Kafka. Pour obtenir un exemple de consommateur Kafka, consultez Exemple de consommateur de l'autoscaler Kafka Cloud Run.
- Votre charge de travail consommateur doit se trouver dans le même Google Cloud projet que votre cluster Kafka.
Bonnes pratiques
- Connectez vos consommateurs Kafka à votre réseau VPC à l'aide de Direct VPC. Le VPC direct vous permet de vous connecter à votre cluster Kafka à l'aide d'adresses IP privées et de conserver le trafic sur votre réseau VPC.
- Configurez une vérification de l'état d'activité pour vos consommateurs Kafka afin de vérifier si le consommateur extrait des événements. La vérification de l'état permet de s'assurer que les instances non opérationnelles redémarrent automatiquement si elles cessent de traiter les événements, même si le conteneur ne plante pas.
Créer l'autoscaler Kafka
Vous pouvez utiliser Cloud Build pour créer une image de conteneur de l'autoscaler Kafka à partir de son code source.
Clonez le dépôt :
git clone https://github.com/GoogleCloudPlatform/cloud-run-kafka-scaler.git
Accédez au dossier du dépôt :
cd cloud-run-kafka-scaler
Pour spécifier le nom de l'image de sortie, mettez à jour %ARTIFACT_REGISTRY_IMAGE%
dans le fichier cloudbuild.yaml
inclus, par exemple : 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
Cette commande crée l'image de conteneur et la transfère vers Artifact Registry. Notez le chemin d'accès complet à l'image (SCALER_IMAGE_PATH
), car vous en aurez besoin plus tard.
Notez que l'image obtenue ne s'exécutera pas en local. Il est conçu pour être superposé à une image de base Java. Pour en savoir plus, y compris sur la façon de réassembler l'image de conteneur pour l'exécuter en local, consultez Configurer les mises à jour automatiques des images de base.
Définir la configuration de l'autoscaler Kafka
Vous pouvez configurer l'autoscaler Kafka à l'aide de secrets. L'autoscaler actualise sa configuration régulièrement. Vous pouvez donc envoyer de nouvelles versions secrètes pour modifier la configuration sans avoir à redéployer l'autoscaler.
Configurer les propriétés du client Kafka
Vous pouvez configurer la connexion à l'API Kafka Admin en installant un secret en tant que volume lorsque vous déployez l'autoscaler Kafka.
Créez un fichier nommé kafka_client_config.txt
et incluez les propriétés de configuration du client Admin Kafka que vous souhaitez ajouter. La propriété bootstrap.servers
est obligatoire :
bootstrap.servers=BOOTSTRAP_SERVER_LIST
Remplacez BOOTSTRAP_SERVER_LIST par la liste HOST:PORT
pour le cluster Kafka.
Configurer l'authentification Kafka
Si votre serveur Kafka nécessite une authentification, incluez les propriétés de configuration nécessaires dans le fichier kafka_client_config.txt
. Par exemple, pour se connecter à un cluster Managed Service pour Apache Kafka à l'aide des identifiants par défaut de l'application avec Google OAuth, ce secret doit inclure les propriétés suivantes :
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;
Remplacez BOOTSTRAP_SERVER_LIST par la liste HOST:PORT
pour le cluster Kafka.
L'utilisation des identifiants par défaut de l'application avec un cluster Managed Service pour Apache Kafka nécessite également d'attribuer le rôle Client Kafka géré (roles/managedkafka.client
) au compte de service de l'autoscaler Kafka :
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/managedkafka.client"
Remplacez les éléments suivants :
- SCALER_SERVICE_ACCOUNT : nom du compte de service de l'autoscaler Kafka.
- PROJECT_ID : ID de projet du service Kafka Autoscaler.
Pour créer le secret qui sera installé en tant que volume lors du déploiement, utilisez le fichier kafka_client_config.txt
:
gcloud secrets create ADMIN_CLIENT_SECRET_NAME --data-file=kafka_client_config.txt
Remplacez ADMIN_CLIENT_SECRET_NAME par le nom du secret d'authentification Kafka.
Configurer le scaling
L'autoscaler Kafka lit sa configuration de scaling à partir du volume /scaler-config/scaling
. Le contenu de ce volume doit être au format YAML. Nous vous recommandons de monter un volume secret pour cette configuration.
Créez un fichier nommé scaling_config.yaml
avec la configuration suivante :
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
Remplacez les éléments suivants :
- PROJECT_ID : ID de projet de la charge de travail du consommateur Kafka à mettre à l'échelle automatiquement.
- REGION : région de la charge de travail du consommateur Kafka à autoscaler.
- CONSUMER_SERVICE_NAME : nom de la charge de travail du consommateur Kafka à mettre à l'échelle automatiquement.
- TARGET_CPU_UTILIZATION : utilisation cible du processeur pour les calculs d'autoscaling, par exemple :
60
. - LAG_THRESHOLD : seuil de la métrique
consumer_lag
pour déclencher l'autoscaling (par exemple,1000
). - (Facultatif) CPU_ACTIVATION_THRESHOLD : seuil d'activation du processeur. Lorsque toutes les métriques sont inactives, le consommateur cible est mis à l'échelle zéro. La valeur par défaut est
0
. - (Facultatif) CPU_TOLERANCE : seuil qui empêche les changements d'échelle s'il se trouve dans la plage spécifiée. Exprimé en pourcentage de l'utilisation cible du processeur. La valeur par défaut est
0.1
. - (Facultatif) CPU_METRIC_WINDOW : période (en secondes) sur laquelle l'utilisation moyenne du processeur est calculée. La valeur par défaut est
120
. - (Facultatif) LAG_ACTIVATION_THRESHOLD : seuil d'activation de la métrique
consumer_lag
. Lorsque toutes les métriques sont inactives, le consommateur cible est mis à l'échelle zéro. La valeur par défaut est0
. - (Facultatif) LAG_TOLERANCE : seuil qui empêche les changements d'échelle s'il se trouve dans la plage spécifiée. Exprimé en pourcentage du décalage cible du consommateur. La valeur par défaut est
0.1
.
Vous pouvez éventuellement configurer des propriétés de scaling avancées à l'aide d'un bloc behavior:
.
Ce bloc est compatible avec la plupart des propriétés des règles de scaling HPA de Kubernetes.
Si vous ne spécifiez pas de bloc behavior
, la configuration par défaut suivante est utilisée :
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
Pour créer le volume secret, qui sera installé sur deployment, copiez la configuration dans un fichier nommé scaling_config.yaml
, puis exécutez la commande suivante :
gcloud secrets create SCALING_CONFIG_SECRET_NAME --data-file=scaling_config.yaml
Remplacez SCALING_CONFIG_SECRET_NAME par le nom du secret de scaling.
Déployer l'autoscaler Kafka
Une fois les conditions préalables remplies, vous pouvez déployer le service d'autoscaler Kafka et son infrastructure associée. Un module Terraform et un script shell sont fournis pour simplifier ce processus.
gcloud
Cette section présente chaque commande gcloud requise pour déployer manuellement l'autoscaler. Dans la plupart des cas, nous vous recommandons d'utiliser plutôt le script shell ou le module Terraform.
Créer un compte de service
Les exigences liées au compte de service dépendent de l'intervalle de vérification de l'autoscaling que vous avez configuré. Vous pouvez configurer l'autoscaler Kafka pour qu'il effectue des vérifications d'autoscaling à des intervalles flexibles :
- Une minute ou plus : Cloud Scheduler déclenche la vérification de l'autoscaling avec une requête POST à l'intervalle sélectionné.
Moins d'une minute : Cloud Scheduler déclenche la création de plusieurs tâches Cloud Tasks chaque minute, en fonction de la fréquence configurée.
Une ou plusieurs minutes
Compte de service de l'autoscaler Kafka
Créez un compte de service pour le scaler automatique Kafka :
gcloud iam service-accounts create SCALER_SERVICE_ACCOUNT
Remplacez SCALER_SERVICE_ACCOUNT par le nom du compte de service de l'autoscaler Kafka.
L'autoscaler Kafka a besoin des autorisations suivantes pour mettre à jour le nombre d'instances de consommateur Kafka :
iam.serviceaccounts.actAs
pour le compte de service du consommateur Kafka.roles/artifactregistry.reader
pour le dépôt contenant l'image du consommateur Kafka.run.workerpools.get
etrun.workerpools.update
. Ces autorisations sont incluses dans le rôle Administrateur Cloud Run (roles/run.admin
).roles/secretmanager.secretAccessor
pour les secrets d'authentification de scaling et Kafka.roles/monitoring.viewer
pour le projet client Kafka. Ce rôle est nécessaire pour lire les métriques d'utilisation du processeur.roles/monitoring.metricWriter
pour le projet client Kafka. Ce rôle est facultatif, mais il permet à l'autoscaler d'émettre des métriques personnalisées pour une meilleure observabilité.
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
Remplacez les éléments suivants :
- PROJECT_ID : ID du projet dans lequel se trouve le service Kafka Autoscaler.
- CONSUMER_SERVICE_ACCOUNT_EMAIL : adresse e-mail du compte de service pour le consommateur Kafka. (par exemple,
example@PROJECT-ID.iam.gserviceaccount.com
). - SCALER_SERVICE_ACCOUNT : compte de service pour le scaling automatique de Kafka.
- ADMIN_CLIENT_SECRET_NAME : nom du secret d'authentification Kafka.
- SCALING_CONFIG_SECRET_NAME : nom du secret de scaling.
- CONSUMER_IMAGE_REPO : ID ou identifiant complet du dépôt avec l'image de conteneur pour le consommateur Kafka.
- REPO_REGION : emplacement du dépôt d'images du consommateur.
Moins d'une minute
Configurer Cloud Tasks
Cloud Scheduler ne peut se déclencher qu'à des intervalles d'une minute ou plus. Pour les intervalles inférieurs à une minute, utilisez Cloud Tasks pour déclencher l'autoscaler Kafka. Pour configurer Cloud Tasks, vous devez disposer des éléments suivants :
- Créez la file d'attente Cloud Tasks pour les tâches de vérification de l'autoscaling.
- Créez le compte de service que Cloud Tasks utilise pour appeler le scaler automatique Kafka avec le rôle Appelant 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"
Remplacez les éléments suivants :
- CLOUD_TASKS_QUEUE_NAME : file d'attente Cloud Tasks configurée pour déclencher les vérifications de l'autoscaling.
- TASKS_SERVICE_ACCOUNT : compte de service que Cloud Tasks doit utiliser pour déclencher les vérifications de l'autoscaling.
- SCALER_SERVICE_NAME : nom de votre service Kafka Autoscaler.
- PROJECT_ID : ID de projet du service Kafka Autoscaler.
- REGION : emplacement du service de scaling automatique Kafka.
Configurer le compte de service de l'autoscaler Kafka
Créez un compte de service pour le scaler automatique Kafka :
gcloud iam service-accounts create SCALER_SERVICE_ACCOUNT
Remplacez SCALER_SERVICE_ACCOUNT par le nom du compte de service de l'autoscaler Kafka.
Pour mettre à jour le nombre d'instances de consommateur Kafka et créer des tâches pour les vérifications de l'autoscaling, le scaler Kafka a besoin des autorisations suivantes :
iam.serviceaccounts.actAs
pour le compte de service du consommateur Kafka.roles/artifactregistry.reader
pour le dépôt contenant l'image du consommateur Kafkarun.workerpools.get
etrun.workerpools.update
. Ces autorisations sont incluses dans le rôle Administrateur Cloud Run (roles/run.admin
).roles/secretmanager.secretAccessor
pour les secrets d'authentification Kafka et de scaling.roles/monitoring.viewer
pour le projet client Kafka. Ce rôle est nécessaire pour lire les métriques d'utilisation du processeur.roles/monitoring.metricWriter
pour le projet client Kafka. Ce rôle est facultatif, mais il permet à l'autoscaler d'émettre des métriques personnalisées pour une meilleure observabilité.- Rôle Empileur de tâches Cloud (
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
Remplacez les éléments suivants :
- PROJECT_ID : ID du projet dans lequel se trouve le service Kafka Autoscaler.
- CONSUMER_SERVICE_ACCOUNT_EMAIL : adresse e-mail du compte de service pour le consommateur Kafka. (par exemple,
example@PROJECT_ID.iam.gserviceaccount.com
). - SCALER_SERVICE_ACCOUNT : compte de service pour le scaling automatique de Kafka.
- CONSUMER_IMAGE_REPO : ID ou identifiant complet du dépôt avec l'image de conteneur pour le consommateur Kafka.
- ADMIN_CLIENT_SECRET_NAME : nom du secret d'authentification Kafka.
- SCALING_CONFIG_SECRET_NAME : nom du secret de scaling.
- REPO_REGION : emplacement du dépôt d'images du consommateur.
- CLOUD_TASKS_QUEUE_NAME : file d'attente Cloud Tasks configurée pour déclencher les vérifications de l'autoscaling.
- REGION : emplacement du service de scaling automatique Kafka.
Configurer les variables d'environnement
Une ou plusieurs minutes
L'autoscaler Kafka utilise des variables d'environnement pour spécifier le consommateur Kafka et d'autres aspects de la charge de travail cible. Pour des raisons de sécurité, nous vous recommandons de configurer les informations sensibles en tant que secrets.
Créez un fichier YAML nommé scaler_env_vars.yaml
avec les variables suivantes :
KAFKA_TOPIC_ID: KAFKA_TOPIC_ID CONSUMER_GROUP_ID: CONSUMER_GROUP_ID CYCLE_SECONDS: CYCLE_SECONDS OUTPUT_SCALER_METRICS: OUTPUT_SCALER_METRICS
Remplacez les éléments suivants :
- KAFKA_TOPIC_ID : ID du sujet auquel les consommateurs Kafka sont abonnés.
- CONSUMER_GROUP_ID : ID du groupe de consommateurs utilisé par le consommateur Kafka cible. Ces valeurs doivent correspondre, sinon l'autoscaling échouera.
- CYCLE_SECONDS : période du cycle de l'autoscaler, en secondes.
- OUTPUT_SCALER_METRICS : paramètre permettant d'activer les métriques. Définissez la valeur sur
true
pour activer la sortie des métriques personnalisées, ou surfalse
dans le cas contraire.
Moins d'une minute
L'autoscaler Kafka utilise des variables d'environnement pour spécifier le consommateur Kafka et d'autres aspects de la charge de travail cible. Pour des raisons de sécurité, nous vous recommandons de configurer les informations sensibles en tant que secrets.
Créez un fichier YAML nommé scaler_env_vars.yaml
avec les variables suivantes :
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
Remplacez les éléments suivants :
- KAFKA_TOPIC_ID : ID du sujet auquel les consommateurs Kafka sont abonnés.
- CONSUMER_GROUP_ID : ID du groupe de consommateurs utilisé par le consommateur Kafka cible. Ces valeurs doivent correspondre, sinon l'autoscaling échouera.
- CYCLE_SECONDS : période du cycle de l'autoscaler, en secondes.
- OUTPUT_SCALER_METRICS : paramètre permettant d'activer les métriques. Définissez la valeur sur
true
pour activer la sortie des métriques personnalisées, ou surfalse
dans le cas contraire. - CLOUD_TASKS_QUEUE_NAME : nom complet de la file d'attente Cloud Tasks pour déclencher les vérifications de l'autoscaling. Il se présente sous la forme suivante :
projects/$PROJECT_ID/locations/$REGION/queues/$CLOUD_TASKS_QUEUE_NAME
. - TASKS_SERVICE_ACCOUNT_EMAIL : compte de service que Cloud Tasks doit utiliser pour déclencher les vérifications de l'autoscaling. (par exemple,
example@PROJECT_ID.iam.gserviceaccount.com
).
Déployez le scaler automatique Kafka à l'aide de l'image fournie, puis connectez-vous au VPC Kafka avec le fichier scaler_env_vars.yaml
et les montages de volume secret :
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
Remplacez les éléments suivants :
- SCALER_IMAGE_URI : URI de l'image de l'autoscaler Kafka.
- SCALER_SERVICE_NAME : nom de votre service Kafka Autoscaler.
- SCALER_SERVICE_ACCOUNT : nom du compte de service de l'autoscaler Kafka.
- PROJECT_ID : ID de projet du service Kafka Autoscaler.
- KAFKA_VPC_NETWORK : réseau VPC connecté au cluster Kafka.
- KAFKA_VPC_SUBNET : sous-réseau VPC connecté au cluster Kafka.
- ADMIN_CLIENT_SECRET_NAME : nom du secret d'authentification Kafka.
- SCALING_CONFIG_SECRET_NAME : nom du secret de scaling.
Configurer des vérifications périodiques de l'autoscaling
Dans cette section, vous allez utiliser Cloud Scheduler pour déclencher des vérifications périodiques de l'autoscaling :
- Une minute ou plus : configurez Cloud Scheduler pour qu'il se déclenche à l'intervalle sélectionné.
- Moins d'une minute : configurez Cloud Scheduler pour qu'il se déclenche toutes les minutes.
Créer un compte de service d'appelant
Pour permettre à Cloud Scheduler d'appeler le scaler automatique Kafka, vous devez créer un compte de service avec le rôle "Demandeur" (roles/run.invoker
) sur le service de scaler automatique 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"
Remplacez les éléments suivants :
- SCALER_SERVICE_NAME : nom de votre service Kafka Autoscaler.
- SCALER_INVOKER_SERVICE_ACCOUNT : nom du compte de service de l'appelant.
- PROJECT_ID : ID de projet du service Kafka Autoscaler.
Créer une tâche Cloud Scheduler
Une ou plusieurs minutes
Créez une tâche Cloud Scheduler avec l'intervalle de vérification de l'autoscaling sélectionné :
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
Remplacez les éléments suivants :
- SCALER_SERVICE_NAME : nom de votre service Kafka Autoscaler.
- SCALER_INVOKER_SERVICE_ACCOUNT : nom du compte de service de l'appelant.
- PROJECT_ID : ID du projet ou du service Kafka Autoscaler.
- PROJECT_NUMBER : numéro de projet du service d'autoscaler Kafka.
- REGION : emplacement du service de scaling automatique Kafka.
- TIMEZONE : fuseau horaire, par exemple
America/Los_Angeles
. - CRON_SCHEDULE : planification sélectionnée au format Crontab. Par exemple, pour chaque minute :
"* * * * *"
.
Moins d'une minute
Créez une tâche Cloud Scheduler qui s'exécute toutes les minutes :
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
Remplacez les éléments suivants :
- SCALER_SERVICE_NAME : nom de votre service Kafka Autoscaler.
- SCALER_INVOKER_SERVICE_ACCOUNT : nom du compte de service de l'appelant.
- PROJECT_ID : ID de projet du service d'autoscaler Kafka.
- PROJECT_NUMBER : numéro de projet du service d'autoscaler Kafka.
- REGION : emplacement du service de scaling automatique Kafka.
- TIMEZONE : fuseau horaire, par exemple
America/Los_Angeles
.
terraform
Le répertoire terraform/
contient un module Terraform réutilisable que vous pouvez utiliser pour provisionner l'autoscaler Kafka et ses ressources associées.
Ce module automatise la création des éléments suivants :
- Service Cloud Run de l'autoscaler Kafka
- Prise en charge des comptes de service et des liaisons IAM
- File d'attente de tâches Cloud
- Tâche Cloud Scheduler
Pour obtenir des instructions détaillées, des exemples d'utilisation et des descriptions de toutes les variables d'entrée/de sortie, consultez terraform readme
.
Vous devez fournir les variables nécessaires au module Terraform, y compris les détails des prérequis, tels que l'ID du projet, la région, l'adresse e-mail du compte de service consommateur, les noms secrets, le chemin d'accès à l'image du scaler et l'ID du thème.
shell
Un script setup_kafka_scaler.sh
est fourni avec l'autoscaler pour créer et configurer automatiquement toutes les ressources nécessaires.
Définir des variables d'environnement
Avant d'exécuter le script, assurez-vous d'avoir défini toutes les variables d'environnement requises :
# 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).
Remplacez les éléments suivants :
- PROJECT_ID : ID du projet dans lequel se trouve le service Kafka Autoscaler.
- REGION : emplacement du service de scaling automatique Kafka.
- DEPLOYED_KAFKA_CONSUMER : nom du consommateur Kafka.
- KAFKA_CONSUMER_ACCOUNT_EMAIL : adresse e-mail du compte de service pour le consommateur Kafka.
- KAFKA_TOPIC_ID : ID du sujet auquel les consommateurs Kafka sont abonnés.
- KAFKA_CONSUMER_GROUP_ID : ID du groupe de consommateurs utilisé par le consommateur Kafka cible. Ces valeurs doivent correspondre, sinon l'autoscaling échouera.
- VPC_NETWORK : réseau VPC connecté au cluster Kafka.
- VPC_SUBNET : sous-réseau VPC connecté au cluster Kafka.
- CLOUD_TASKS_QUEUE_FOR_SCALING_CHECKS : file d'attente Cloud Tasks configurée pour déclencher les vérifications de l'autoscaling.
- TASKS_SERVICE_ACCOUNT_NAME : compte de service que Cloud Tasks doit utiliser pour déclencher les vérifications de l'autoscaling.
- KAFKA_AUTOSCALER_SERVICE_NAME : nom de votre service Kafka Autoscaler.
- KAFKA_AUTOSCALER_IMAGE_URI : URI de l'image de l'autoscaler Kafka.
- KAFKA_AUTOSCALER_CONFIG_SECRET_NAME : nom du secret de scaling.
- SCALER_CHECK_FREQUENCY : période du cycle de l'autoscaler, en secondes.
Exécuter le script d'installation
Exécutez le script setup_kafka_scaler.sh
fourni :
./setup_kafka_scaler.sh
Le script effectue les actions suivantes :
- Crée la file d'attente Cloud Tasks utilisée pour déclencher les vérifications de l'autoscaling.
- Crée le compte de service de l'autoscaler Kafka et accorde les autorisations nécessaires.
- Configure et déploie l'autoscaler Kafka.
- Crée le job Cloud Scheduler qui déclenche périodiquement les vérifications de l'autoscaling.
Lorsque le script setup_kafka_scaler.sh
s'exécute, il génère les variables d'environnement configurées. Vérifiez que les variables d'environnement sont correctes avant de continuer.
Accorder des autorisations supplémentaires
Pour modifier le nombre d'instances du consommateur Kafka, le compte de service de l'autoscaler Kafka doit disposer de l'autorisation d'affichage sur l'image de conteneur déployée. Par exemple, si l'image consommateur a été déployée à partir d'Artifact Registry, exécutez la commande suivante :
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
Vérifier que l'autoscaling Kafka fonctionne
Le scaling du service d'autoscaler Kafka est déclenché par une requête envoyée à l'URL du service (SCALER_SERVICE_NAME-
PROJECT_NUMBER.
REGION.run.app
).
Vous pouvez envoyer une requête POST
au service Kafka Autoscaler pour déclencher le calcul de l'autoscaling :
curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" https://SCALER_SERVICE_NAME-PROJECT_NUMBER.REGION.run.app
Remplacez les éléments suivants :
- SCALER_SERVICE_NAME : nom de votre service Kafka Autoscaler.
- PROJECT_NUMBER : numéro de projet du service d'autoscaler Kafka.
- REGION : emplacement du service de scaling automatique Kafka.
Les requêtes POST
déclenchent le calcul de l'autoscaling, qui est consigné dans les journaux et modifie le nombre d'instances en fonction de la recommandation.
Les journaux de votre service d'autoscaler Kafka doivent inclure des messages tels que [SCALING] Recommended instances X
.
Si l'indicateur OUTPUT_SCALER_METRICS
est activé, vous pouvez également trouver les métriques Cloud Monitoring du scaler sous custom.googleapis.com/cloud-run-kafkascaler
.
Configuration avancée du scaling
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]
La liste suivante décrit certains des éléments précédents :
scaleDown
: comportement lors de la réduction du nombre d'instances (scaling à la baisse).scaleUp
: comportement lors de l'augmentation du nombre d'instances (scaling à la hausse).stabilizationWindowSeconds
: nombre d'instances calculé sur une période glissante, le plus élevé (scaleDown
) ou le plus bas (scaleUp
). Si vous définissez la valeur sur0
, la valeur calculée la plus récente est utilisée.selectPolicy
: résultat à appliquer lorsque plusieurs règles sont configurées.Min
: la plus petite modificationMax
: la plus grande variationPercent
: les modifications par période sont limitées au pourcentage configuré du nombre total d'instances.Instances
: les modifications par période sont limitées au nombre d'instances configuré.periodSeconds
: durée pendant laquelle la règle est appliquée.
Par exemple, la spécification complète, avec la configuration par défaut, ressemble à ce qui suit :
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