Questo tutorial mostra come configurare ed eseguire il deployment di uno strumento di scalabilità automatica Kafka come servizio Cloud Run. Questo autoscaler esegue la logica di scalabilità per un carico di lavoro consumer Kafka, ad esempio un deployment di un pool di worker Cloud Run. Il gestore della scalabilità automatica di Kafka legge le metriche dal cluster Kafka e utilizza la scalabilità manuale per un pool di worker o un servizio Cloud Run per scalare un carico di lavoro consumer Kafka in base alla metrica del ritardo del consumer Kafka.
Il seguente diagramma mostra come un servizio di scalabilità automatica di Kafka legge le metriche da un cluster Kafka per scalare automaticamente un pool di worker consumer Kafka.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per eseguire il deployment e l'esecuzione di questo servizio, chiedi all'amministratore di concederti i seguenti ruoli IAM:
- Sviluppatore Cloud Run (
roles/run.developer
) - Utente service account (
roles/iam.serviceAccountUser
) - Lettore Artifact Registry (
roles/artifactregistry.reader
) - Amministratore Cloud Scheduler
(
roles/cloudscheduler.admin
) per creare il job Cloud Scheduler per attivare i controlli di scalabilità automatica - Amministratore coda Cloud Tasks
(
roles/cloudtasks.queueAdmin
) per creare la coda Cloud Tasks per i controlli di scalabilità automatica - Amministratore della sicurezza
(
roles/iam.securityAdmin
) per concedere autorizzazioni ai service account
Prima di iniziare
Per configurare e utilizzare lo strumento di scalabilità automatica di Kafka, devi disporre delle seguenti risorse.
- Cluster Kafka
- Consumer di cui è stato eseguito il deployment
Cluster Kafka
- Un cluster Kafka deve essere in esecuzione su Compute Engine, Google Kubernetes Engine o Managed Service per Apache Kafka.
- Un argomento Kafka configurato, con eventi pubblicati in quell'argomento.
Consumer Cloud Run di cui è stato eseguito il deployment
- Un carico di lavoro consumer Kafka deve essere distribuito su Cloud Run come servizio o pool di worker. Deve essere configurato per connettersi al cluster, all'argomento e al gruppo di consumatori Kafka. Per un esempio di consumer Kafka, vedi Cloud Run Kafka Autoscaler Example Consumer.
- Il carico di lavoro consumer deve trovarsi nello stesso progetto Google Cloud del cluster Kafka.
Best practice
- Connetti i tuoi consumer Kafka alla tua rete VPC utilizzando VPC diretto. VPC diretto consente di connettersi al cluster Kafka utilizzando indirizzi IP privati e di mantenere il traffico sulla rete VPC.
- Configura un controllo di integrità di attività per i consumer Kafka che verifichi se il consumer sta recuperando eventi. Il controllo di integrità contribuisce a garantire che le istanze in stato non integro vengano riavviate automaticamente se smettono di elaborare gli eventi, anche se il container non si arresta in modo anomalo.
Crea il gestore della scalabilità automatica Kafka
Puoi utilizzare Cloud Build per creare un'immagine container di Kafka Autoscaler dal relativo codice sorgente.
Clona il repository:
git clone https://github.com/GoogleCloudPlatform/cloud-run-kafka-scaler.git
Vai alla cartella del repository:
cd cloud-run-kafka-scaler
Per specificare il nome dell'immagine di output, aggiorna %ARTIFACT_REGISTRY_IMAGE%
nel file cloudbuild.yaml
incluso, ad esempio: 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
Questo comando crea l'immagine container ed esegue il push su Artifact Registry. Registra il percorso completo dell'immagine (SCALER_IMAGE_PATH
) perché ti servirà in un secondo momento.
Tieni presente che l'immagine risultante non verrà eseguita localmente. È progettata per essere sovrapposta a un'immagine di base Java. Per ulteriori informazioni, inclusa la procedura per riassemblare l'immagine del container per l'esecuzione in locale, consulta Configurare gli aggiornamenti automatici dell'immagine di base.
Definisci la configurazione dello strumento di scalabilità automatica di Kafka
Puoi configurare lo strumento di scalabilità automatica di Kafka utilizzando i secret. Il gestore della scalabilità automatica aggiorna periodicamente la sua configurazione, il che significa che puoi eseguire il push di nuove versioni del secret per modificare la configurazione senza dover eseguire nuovamente il deployment del gestore della scalabilità automatica.
Configurare le proprietà del client Kafka
Puoi configurare la connessione all'API Kafka Admin montando un secret come volume quando esegui il deployment del gestore della scalabilità automatica Kafka.
Crea un file denominato kafka_client_config.txt
e includi le proprietà di configurazione del client amministratore di Kafka
che vuoi aggiungere. La proprietà bootstrap.servers
è obbligatoria:
bootstrap.servers=BOOTSTRAP_SERVER_LIST
Sostituisci BOOTSTRAP_SERVER_LIST con l'elenco HOST:PORT
per il cluster Kafka.
Configura l'autenticazione Kafka
Se il server Kafka richiede l'autenticazione, includi le proprietà di configurazione necessarie nel file kafka_client_config.txt
. Ad esempio, per
connettersi a un cluster Managed Service per Apache Kafka
utilizzando le
credenziali predefinite dell'applicazione
con Google OAuth, questo secret deve includere le seguenti proprietà:
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;
Sostituisci BOOTSTRAP_SERVER_LIST con l'elenco HOST:PORT
per il cluster Kafka.
L'utilizzo delle credenziali predefinite dell'applicazione con un cluster Managed Service per Apache Kafka
richiede anche la concessione del ruolo Client Kafka gestito
(roles/managedkafka.client
) aaccount di serviziont di Kafka Autoscaler:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/managedkafka.client"
Sostituisci quanto segue:
- SCALER_SERVICE_ACCOUNT: il nome del account di servizio del gestore della scalabilità automatica di Kafka.
- PROJECT_ID: l'ID progetto per il servizio di scalabilità automatica di Kafka.
Per creare il secret, che verrà montato come volume al momento del deployment, utilizza il file
kafka_client_config.txt
:
gcloud secrets create ADMIN_CLIENT_SECRET_NAME --data-file=kafka_client_config.txt
Sostituisci ADMIN_CLIENT_SECRET_NAME con il nome del secret di autenticazione Kafka.
Configura scalabilità
Il gestore della scalabilità automatica di Kafka legge la configurazione di scalabilità dal volume /scaler-config/scaling
. I contenuti di questo volume devono essere formattati come YAML. Ti consigliamo di montare un volume secret per questa configurazione.
Crea un file denominato scaling_config.yaml
con la seguente configurazione:
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
Sostituisci quanto segue:
- PROJECT_ID: l'ID progetto del workload consumer Kafka di cui eseguire lo scale automatico.
- REGION: la regione del carico di lavoro del consumer Kafka di cui eseguire lo scale automatico.
- CONSUMER_SERVICE_NAME: il nome del carico di lavoro consumer Kafka di cui eseguire lo scale automatico.
- TARGET_CPU_UTILIZATION: l'utilizzo CPU target per i calcoli di scalabilità automatica, ad esempio:
60
. - LAG_THRESHOLD: la soglia per la metrica
consumer_lag
per attivare la scalabilità automatica, ad esempio:1000
. - (Facoltativo) CPU_ACTIVATION_THRESHOLD: la soglia di attivazione della CPU. Quando tutte le metriche sono inattive, il consumatore target viene scalato a zero. Il valore predefinito è
0
. - (Facoltativo) CPU_TOLERANCE: una soglia che impedisce le modifiche di scalabilità se rientra nell'intervallo specificato. Espresso come percentuale dell'utilizzo della CPU target. Il valore predefinito è
0.1
. - (Facoltativo) CPU_METRIC_WINDOW: un periodo di tempo, in secondi, su cui viene calcolato l'utilizzo medio della CPU. Il valore predefinito è
120
. - (Facoltativo) LAG_ACTIVATION_THRESHOLD: la soglia di attivazione per la metrica
consumer_lag
. Quando tutte le metriche sono inattive, il consumatore target viene scalato a zero. Il valore predefinito è0
. - (Facoltativo) LAG_TOLERANCE: una soglia che impedisce le modifiche di scalabilità se rientra nell'intervallo specificato. Espresso come percentuale del ritardo del consumatore target. Il valore predefinito è
0.1
.
Se vuoi, puoi configurare le proprietà di scalabilità avanzate utilizzando un blocco behavior:
.
Questo blocco supporta molte delle stesse proprietà
dei criteri di scalabilità HPA di Kubernetes.
Se non specifichi un blocco behavior
, viene utilizzata la seguente configurazione predefinita:
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
Per creare il volume secret, che verrà montato in deployment,
copia la configurazione in un file denominato scaling_config.yaml
e
poi esegui il comando seguente:
gcloud secrets create SCALING_CONFIG_SECRET_NAME --data-file=scaling_config.yaml
Sostituisci SCALING_CONFIG_SECRET_NAME con il nome del secret di scalabilità.
Esegui il deployment del gestore della scalabilità automatica di Kafka
Dopo aver completato i prerequisiti, puoi eseguire il deployment del servizio di scalabilità automatica di Kafka e della relativa infrastruttura di supporto. Per semplificare questo processo, vengono forniti un modulo Terraform e uno script shell.
gcloud
Questa sezione descrive in dettaglio ogni comando gcloud necessario per eseguire il deployment manuale del gestore della scalabilità automatica. Nella maggior parte dei casi, ti consigliamo di utilizzare lo script shell o il modulo Terraform.
Crea un account di servizio
I requisiti dell'account di servizio dipendono dall'intervallo di controllo della scalabilità automatica che hai configurato. Puoi configurare il gestore della scalabilità automatica di Kafka in modo che esegua i controlli di scalabilità automatica a intervalli flessibili:
- Un minuto o più: Cloud Scheduler attiva il controllo della scalabilità automatica con una richiesta POST all'intervallo selezionato.
Meno di un minuto: Cloud Scheduler attiva la creazione di più Cloud Tasks ogni minuto, in base alla frequenza configurata.
Uno o più minuti
Account di servizio dello strumento di scalabilità automatica di Kafka
Crea un account di servizio per lo strumento di scalabilità automatica di Kafka:
gcloud iam service-accounts create SCALER_SERVICE_ACCOUNT
Sostituisci SCALER_SERVICE_ACCOUNT con il nome del account di servizio di Kafka Autoscaler.
Il gestore della scalabilità automatica di Kafka ha bisogno delle seguenti autorizzazioni per aggiornare il numero di istanze consumer Kafka:
iam.serviceaccounts.actAs
per il account di servizio consumer Kafka.roles/artifactregistry.reader
per il repository che contiene l'immagine consumer Kafka.run.workerpools.get
erun.workerpools.update
. Queste autorizzazioni sono incluse nel ruolo Amministratore di Cloud Run (roles/run.admin
).roles/secretmanager.secretAccessor
per i secret di scalabilità e autenticazione Kafka.roles/monitoring.viewer
per il progetto consumer Kafka. Questo ruolo è necessario per leggere le metriche di utilizzo della CPU.roles/monitoring.metricWriter
per il progetto consumer Kafka. Questo ruolo è facoltativo, ma consente al gestore della scalabilità automatica di emettere metriche personalizzate per una migliore osservabilità.
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
Sostituisci quanto segue:
- PROJECT_ID: l'ID progetto in cui si trova il servizio di scalabilità automatica di Kafka.
- CONSUMER_SERVICE_ACCOUNT_EMAIL: l'indirizzo email dell'account di servizio per il consumer Kafka. Ad esempio,
example@PROJECT-ID.iam.gserviceaccount.com
. - SCALER_SERVICE_ACCOUNT: l'account di servizio per il gestore della scalabilità automatica di Kafka.
- ADMIN_CLIENT_SECRET_NAME: il nome del secret di autenticazione Kafka.
- SCALING_CONFIG_SECRET_NAME: il nome del secret di scalabilità.
- CONSUMER_IMAGE_REPO: l'ID o l'identificatore completo del repository con l'immagine del container per il consumer Kafka.
- REPO_REGION: la posizione del repository di immagini consumer.
Meno di un minuto
Configura Cloud Tasks
Cloud Scheduler può attivarsi solo a intervalli di un minuto o più. Per intervalli inferiori a un minuto, utilizza Cloud Tasks per attivare il gestore della scalabilità automatica di Kafka. Per configurare Cloud Tasks sono necessari i seguenti elementi:
- Creazione della coda di Cloud Tasks per le attività di controllo della scalabilità automatica.
- Creazione del account di servizio utilizzato da Cloud Tasks per richiamare lo strumento di scalabilità automatica Kafka con il ruolo 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"
Sostituisci quanto segue:
- CLOUD_TASKS_QUEUE_NAME: la coda Cloud Tasks configurata per attivare i controlli di scalabilità automatica.
- TASKS_SERVICE_ACCOUNT: il account di servizio che Cloud Tasks deve utilizzare per attivare i controlli di scalabilità automatica.
- SCALER_SERVICE_NAME: il nome del servizio di scalabilità automatica di Kafka.
- PROJECT_ID: l'ID progetto per il servizio di scalabilità automatica di Kafka.
- REGION: la posizione del servizio di scalabilità automatica di Kafka.
Configura il account di servizio dello strumento di scalabilità automatica di Kafka
Crea un account di servizio per lo strumento di scalabilità automatica di Kafka:
gcloud iam service-accounts create SCALER_SERVICE_ACCOUNT
Sostituisci SCALER_SERVICE_ACCOUNT con il nome del account di servizio di Kafka Autoscaler.
Per aggiornare il numero di istanze consumer Kafka e creare attività per i controlli di scalabilità automatica, il gestore della scalabilità automatica Kafka ha bisogno delle seguenti autorizzazioni:
iam.serviceaccounts.actAs
per il account di servizio consumer Kafka.roles/artifactregistry.reader
per il repository che contiene l'immagine consumer Kafkarun.workerpools.get
erun.workerpools.update
. Queste autorizzazioni sono incluse nel ruolo Amministratore di Cloud Run (roles/run.admin
).roles/secretmanager.secretAccessor
per entrambi i secret per lo scaling e l'autenticazione Kafka.roles/monitoring.viewer
per il progetto consumer Kafka. Questo ruolo è necessario per leggere le metriche di utilizzo della CPU.roles/monitoring.metricWriter
per il progetto consumer Kafka. Questo ruolo è facoltativo, ma consente al gestore della scalabilità automatica di emettere metriche personalizzate per una migliore osservabilità.- Ruolo Autore inserimento in coda Cloud Tasks (
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
Sostituisci quanto segue:
- PROJECT_ID: l'ID progetto in cui si trova il servizio di scalabilità automatica di Kafka.
- CONSUMER_SERVICE_ACCOUNT_EMAIL: l'indirizzo email dell'account di servizio per il consumer Kafka. Ad esempio,
example@PROJECT_ID.iam.gserviceaccount.com
. - SCALER_SERVICE_ACCOUNT: l'account di servizio per il gestore della scalabilità automatica di Kafka.
- CONSUMER_IMAGE_REPO: l'ID o l'identificatore completo del repository con l'immagine del container per il consumer Kafka.
- ADMIN_CLIENT_SECRET_NAME: il nome del secret di autenticazione Kafka.
- SCALING_CONFIG_SECRET_NAME: il nome del secret di scalabilità.
- REPO_REGION: la posizione del repository di immagini consumer.
- CLOUD_TASKS_QUEUE_NAME: la coda Cloud Tasks configurata per attivare i controlli di scalabilità automatica.
- REGION: la posizione del servizio di scalabilità automatica di Kafka.
Configura le variabili di ambiente
Uno o più minuti
Il gestore della scalabilità automatica Kafka utilizza le variabili di ambiente per specificare il consumer Kafka e altri aspetti del carico di lavoro di destinazione. Per motivi di sicurezza, ti consigliamo di configurare le informazioni sensibili come secret.
Crea un file YAML denominato scaler_env_vars.yaml
con le seguenti variabili:
KAFKA_TOPIC_ID: KAFKA_TOPIC_ID CONSUMER_GROUP_ID: CONSUMER_GROUP_ID CYCLE_SECONDS: CYCLE_SECONDS OUTPUT_SCALER_METRICS: OUTPUT_SCALER_METRICS
Sostituisci quanto segue:
- KAFKA_TOPIC_ID: l'ID argomento a cui si iscrivono i consumer Kafka.
- CONSUMER_GROUP_ID: l'ID gruppo di consumer utilizzato dal consumer Kafka di destinazione. Questi valori devono corrispondere, altrimenti lo scalabilità automatica non funzionerà.
- CYCLE_SECONDS: il periodo del ciclo del gestore della scalabilità automatica, in secondi.
- OUTPUT_SCALER_METRICS: l'impostazione per abilitare le metriche. Imposta il valore su
true
per attivare l'output delle metriche personalizzate o sufalse
in caso contrario.
Meno di un minuto
Il gestore della scalabilità automatica Kafka utilizza le variabili di ambiente per specificare il consumer Kafka e altri aspetti del carico di lavoro di destinazione. Per motivi di sicurezza, ti consigliamo di configurare le informazioni sensibili come secret.
Crea un file YAML denominato scaler_env_vars.yaml
con le seguenti variabili:
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
Sostituisci quanto segue:
- KAFKA_TOPIC_ID: l'ID argomento a cui si iscrivono i consumer Kafka.
- CONSUMER_GROUP_ID: l'ID gruppo di consumer utilizzato dal consumer Kafka di destinazione. Questi valori devono corrispondere, altrimenti lo scalabilità automatica non funzionerà.
- CYCLE_SECONDS: il periodo del ciclo del gestore della scalabilità automatica, in secondi.
- OUTPUT_SCALER_METRICS: l'impostazione per abilitare le metriche. Imposta il valore su
true
per attivare l'output delle metriche personalizzate o sufalse
in caso contrario. - CLOUD_TASKS_QUEUE_NAME: il nome completo della coda Cloud Tasks
per attivare i controlli di scalabilità automatica. Ha il seguente formato:
projects/$PROJECT_ID/locations/$REGION/queues/$CLOUD_TASKS_QUEUE_NAME
. - TASKS_SERVICE_ACCOUNT_EMAIL: il account di servizio che Cloud Tasks
deve utilizzare per attivare i controlli di scalabilità automatica. Ad esempio,
example@PROJECT_ID.iam.gserviceaccount.com
.
Esegui il deployment dello strumento di scalabilità automatica di Kafka utilizzando l'immagine fornita e connettiti al VPC Kafka
con il file scaler_env_vars.yaml
e i montaggi del 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
Sostituisci quanto segue:
- SCALER_IMAGE_URI: l'URI dell'immagine del gestore della scalabilità automatica Kafka.
- SCALER_SERVICE_NAME: il nome del servizio di scalabilità automatica di Kafka.
- SCALER_SERVICE_ACCOUNT: il nome del service account del gestore della scalabilità automatica di Kafka.
- PROJECT_ID: l'ID progetto per il servizio di scalabilità automatica di Kafka.
- KAFKA_VPC_NETWORK: la rete VPC connessa al cluster Kafka.
- KAFKA_VPC_SUBNET: la subnet VPC connessa al cluster Kafka.
- ADMIN_CLIENT_SECRET_NAME: il nome del secret di autenticazione Kafka.
- SCALING_CONFIG_SECRET_NAME: il nome del secret di scalabilità.
Configurare controlli periodici della scalabilità automatica
In questa sezione, utilizzi Cloud Scheduler per attivare controlli periodici di scalabilità automatica:
- Un minuto o più: configura Cloud Scheduler in modo che venga attivato all'intervallo selezionato
- Meno di un minuto: configura Cloud Scheduler in modo che venga attivato ogni minuto
Crea account di servizio invoker
Per consentire a Cloud Scheduler di chiamare lo scalatore automatico Kafka, devi creare un service account con il ruolo Invoker (roles/run.invoker
) nel servizio di scalatore automatico 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"
Sostituisci quanto segue:
- SCALER_SERVICE_NAME: il nome del servizio di scalabilità automatica di Kafka.
- SCALER_INVOKER_SERVICE_ACCOUNT: il nome del account di servizio chiamante.
- PROJECT_ID: l'ID progetto per il servizio di scalabilità automatica di Kafka.
Crea job Cloud Scheduler
Uno o più minuti
Crea un job Cloud Scheduler con l'intervallo di controllo della scalabilità automatica selezionato:
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
Sostituisci quanto segue:
- SCALER_SERVICE_NAME: il nome del servizio di scalabilità automatica di Kafka.
- SCALER_INVOKER_SERVICE_ACCOUNT: il nome del account di servizio chiamante.
- PROJECT_ID: l'ID progetto o il servizio di scalabilità automatica di Kafka.
- PROJECT_NUMBER: il numero di progetto per il servizio di scalabilità automatica di Kafka.
- REGION: la posizione del servizio di scalabilità automatica di Kafka.
- TIMEZONE: il fuso orario, ad esempio
America/Los_Angeles
. - CRON_SCHEDULE: la pianificazione selezionata nel formato Crontab. Ad esempio, ogni minuto:
"* * * * *"
.
Meno di un minuto
Crea un job Cloud Scheduler che venga eseguito ogni 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
Sostituisci quanto segue:
- SCALER_SERVICE_NAME: il nome del servizio di scalabilità automatica di Kafka.
- SCALER_INVOKER_SERVICE_ACCOUNT: il nome del account di servizio chiamante.
- PROJECT_ID: l'ID progetto del servizio di scalabilità automatica di Kafka.
- PROJECT_NUMBER: il numero di progetto per il servizio di scalabilità automatica di Kafka.
- REGION: la posizione del servizio di scalabilità automatica di Kafka.
- TIMEZONE: il fuso orario, ad esempio
America/Los_Angeles
.
terraform
La directory terraform/
contiene un modulo Terraform riutilizzabile che puoi utilizzare per eseguire il provisioning dello strumento di scalabilità automatica Kafka e delle relative risorse.
Questo modulo automatizza la creazione di:
- Servizio Cloud Run di scalabilità automatica di Kafka
- Supporto di service account e binding IAM
- Coda di attività cloud
- Job Cloud Scheduler
Per istruzioni dettagliate, esempi di utilizzo e descrizioni di tutte le variabili di input/output, consulta la terraform readme
.
Devi fornire le variabili necessarie al modulo Terraform, inclusi i dettagli dei prerequisiti, come ID progetto, regione, email SA consumer, nomi dei secret, percorso dell'immagine dello scaler e ID argomento.
shell
Con il gestore della scalabilità automatica viene fornito uno script setup_kafka_scaler.sh
per creare e configurare automaticamente tutte le risorse necessarie.
Imposta le variabili di ambiente
Prima di eseguire lo script, assicurati di aver impostato tutte le variabili di ambiente richieste:
# 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).
Sostituisci quanto segue:
- PROJECT_ID: l'ID progetto in cui si trova il servizio di scalabilità automatica di Kafka.
- REGION: la posizione del servizio di scalabilità automatica di Kafka.
- DEPLOYED_KAFKA_CONSUMER: il nome del consumer Kafka.
- KAFKA_CONSUMER_ACCOUNT_EMAIL: l'indirizzo email dell'account di servizio per il consumer Kafka.
- KAFKA_TOPIC_ID: l'ID argomento a cui si iscrivono i consumer Kafka.
- KAFKA_CONSUMER_GROUP_ID: l'ID gruppo di consumer utilizzato dal consumer Kafka di destinazione. Questi valori devono corrispondere, altrimenti lo scalabilità automatica non funzionerà.
- VPC_NETWORK: la rete VPC connessa al cluster Kafka.
- VPC_SUBNET: la subnet VPC connessa al cluster Kafka.
- CLOUD_TASKS_QUEUE_FOR_SCALING_CHECKS: la coda Cloud Tasks configurata per attivare i controlli di scalabilità automatica.
- TASKS_SERVICE_ACCOUNT_NAME: il account di servizio che Cloud Tasks deve utilizzare per attivare i controlli di scalabilità automatica.
- KAFKA_AUTOSCALER_SERVICE_NAME: il nome del servizio di scalabilità automatica di Kafka.
- KAFKA_AUTOSCALER_IMAGE_URI: l'URI dell'immagine del gestore della scalabilità automatica Kafka.
- KAFKA_AUTOSCALER_CONFIG_SECRET_NAME: il nome del secret di scalabilità.
- SCALER_CHECK_FREQUENCY: il periodo del ciclo del gestore della scalabilità automatica, in secondi.
Esegui lo script di configurazione
Esegui lo script setup_kafka_scaler.sh
fornito:
./setup_kafka_scaler.sh
Lo script esegue queste azioni:
- Crea la coda di Cloud Tasks utilizzata per attivare i controlli di scalabilità automatica.
- Crea il account di servizio del gestore della scalabilità automatica di Kafka e concede le autorizzazioni necessarie.
- Configura e implementa il gestore della scalabilità automatica di Kafka.
- Crea il job Cloud Scheduler che attiva periodicamente i controlli di scalabilità automatica.
Quando viene eseguito lo script setup_kafka_scaler.sh
, vengono restituite le variabili di ambiente
configurate. Verifica che le variabili di ambiente siano corrette prima di continuare.
Concedi autorizzazioni aggiuntive
Per modificare il conteggio delle istanze del consumer Kafka, l'account di servizio Kafka Autoscaler deve disporre dell'autorizzazione di visualizzazione sull'immagine del container di cui è stato eseguito il deployment. Ad esempio, se l'immagine consumer è stata sottoposta a deployment da Artifact Registry, esegui questo 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
Verificare che la scalabilità automatica di Kafka funzioni
La scalabilità automatica del servizio di scalabilità automatica di Kafka viene attivata con una richiesta all'URL del servizio
(SCALER_SERVICE_NAME-
PROJECT_NUMBER.
REGION.run.app
).
Puoi inviare una richiesta POST
al servizio di scalabilità automatica di Kafka per attivare il calcolo della scalabilità automatica:
curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" https://SCALER_SERVICE_NAME-PROJECT_NUMBER.REGION.run.app
Sostituisci quanto segue:
- SCALER_SERVICE_NAME: il nome del servizio di scalabilità automatica di Kafka.
- PROJECT_NUMBER: il numero di progetto per il servizio di scalabilità automatica di Kafka.
- REGION: la posizione del servizio di scalabilità automatica di Kafka.
Le richieste POST
attivano il calcolo della scalabilità automatica, l'output nella registrazione e modificano
il numero di istanze in base al consiglio.
I log del servizio di scalabilità automatica di Kafka devono includere messaggi come [SCALING] Recommended instances X
.
Se il flag OUTPUT_SCALER_METRICS
è attivato, puoi trovare le metriche di Cloud Monitoring dello scalatore anche in custom.googleapis.com/cloud-run-kafkascaler
.
Configurazione avanzata dello 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]
Il seguente elenco descrive alcuni degli elementi precedenti:
scaleDown
: il comportamento durante la riduzione del conteggio delle istanze (ridimensionamento verso il basso).scaleUp
: il comportamento quando si aumenta il numero di istanze (scalabilità verticale).stabilizationWindowSeconds
: il conteggio delle istanze più alto (scaleDown
) o più basso (scaleUp
) calcolato in un periodo mobile. Se imposti il valore su0
, viene utilizzato il valore calcolato più recente.selectPolicy
: il risultato da applicare quando sono configurati più criteri.Min
: la variazione più piccolaMax
: la variazione più grandePercent
: le modifiche per periodo sono limitate alla percentuale configurata del totale delle istanze.Instances
: le modifiche per periodo sono limitate al numero configurato di istanze.periodSeconds
: il periodo di tempo durante il quale vengono applicate le norme.
Ad esempio, la specifica completa, utilizzando la configurazione predefinita, ha il seguente aspetto:
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