Este tutorial mostra como configurar e implementar um escalador automático do Kafka como um serviço do Cloud Run. Este escalador automático executa a lógica de escalamento para uma carga de trabalho do consumidor do Kafka, como uma implementação do conjunto de trabalhadores do Cloud Run. O escalador automático do Kafka lê métricas do seu cluster do Kafka e usa o escalonamento manual para um conjunto de trabalhadores ou um serviço do Cloud Run para escalonar uma carga de trabalho do consumidor do Kafka com base na métrica de atraso do consumidor do Kafka.
O diagrama seguinte mostra como um serviço de escalamento automático do Kafka lê métricas de um cluster do Kafka para dimensionar automaticamente um conjunto de trabalhadores consumidores do Kafka.
Funções necessárias
Para receber as autorizações de que precisa para implementar e executar este serviço, peça ao seu administrador que lhe conceda as seguintes funções do IAM:
- Cloud Run Developer (
roles/run.developer
) - Utilizador da conta de serviço (
roles/iam.serviceAccountUser
) - Leitor do Artifact Registry (
roles/artifactregistry.reader
) - Administrador do Cloud Scheduler
(
roles/cloudscheduler.admin
) para criar a tarefa do Cloud Scheduler para acionar verificações de dimensionamento automático - Administrador da fila do Cloud Tasks
(
roles/cloudtasks.queueAdmin
) para criar a fila do Cloud Tasks para verificações de dimensionamento automático - Administrador de segurança
(
roles/iam.securityAdmin
) para conceder autorizações a contas de serviço
Antes de começar
Para configurar e usar o escalador automático do Kafka, precisa dos seguintes recursos implementados.
- Cluster do Kafka
- Consumidor implementado
Cluster do Kafka
- Um cluster Kafka tem de estar em execução no Compute Engine, no Google Kubernetes Engine ou no Managed Service for Apache Kafka.
- Um tópico do Kafka configurado, com eventos que estão a ser publicados nesse tópico.
Consumidor do Cloud Run implementado
- Uma carga de trabalho do consumidor do Kafka tem de ser implementada no Cloud Run como um serviço ou um conjunto de trabalhadores. Tem de estar configurado para estabelecer ligação ao cluster, ao tópico e ao grupo de consumidores do Kafka. Para ver um exemplo de consumidor do Kafka, consulte o exemplo de consumidor do escalador automático do Kafka do Cloud Run.
- A sua carga de trabalho de consumidor tem de estar no mesmo Google Cloud projeto que o seu cluster Kafka.
Práticas recomendadas
- Ligue os seus consumidores do Kafka à sua rede VPC através da VPC direta. A VPC direta permite-lhe estabelecer ligação ao cluster do Kafka através de endereços IP privados e manter o tráfego na sua rede VPC.
- Configure uma verificação de funcionamento da atividade para os seus consumidores do Kafka que verifique se o consumidor está a extrair eventos. A verificação de estado ajuda a garantir que as instâncias não íntegras são reiniciadas automaticamente se deixarem de processar eventos, mesmo que o contentor não falhe.
Crie o redimensionador automático do Kafka
Pode usar o Cloud Build para criar uma imagem de contentor do escalador automático do Kafka a partir do respetivo código-fonte.
Clone o repositório:
git clone https://github.com/GoogleCloudPlatform/cloud-run-kafka-scaler.git
Navegue para a pasta do repositório:
cd cloud-run-kafka-scaler
Para especificar o nome da imagem de saída, atualize %ARTIFACT_REGISTRY_IMAGE%
no ficheiro cloudbuild.yaml
incluído, por exemplo: 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 cria a imagem de contentor e envia-a para o Artifact Registry. Registe o caminho completo da imagem (SCALER_IMAGE_PATH
), uma vez que vai precisar dele mais tarde.
Tenha em atenção que a imagem resultante não é executada localmente. Destina-se a ser sobreposta a uma imagem base Java. Para mais informações, incluindo como voltar a montar a imagem do contentor para execução local, consulte o artigo Configure atualizações automáticas de imagens base.
Defina a configuração do escalamento automático do Kafka
Pode configurar o escalador automático do Kafka através de segredos. O escalador automático atualiza a respetiva configuração periodicamente, o que significa que pode enviar novas versões secretas para alterar a configuração sem ter de reimplementar o escalador automático.
Configure as propriedades do cliente Kafka
Pode configurar a ligação à API Kafka Admin ao montar um segredo como um volume quando implementa o escalador automático do Kafka.
Crie um ficheiro com o nome kafka_client_config.txt
e inclua todas as propriedades de configuração do cliente de administração do Kafka que quer adicionar. A propriedade bootstrap.servers
é obrigatória:
bootstrap.servers=BOOTSTRAP_SERVER_LIST
Substitua BOOTSTRAP_SERVER_LIST pela lista HOST:PORT
do cluster Kafka.
Configure a autenticação do Kafka
Se o seu servidor Kafka exigir autenticação, inclua as propriedades de configuração necessárias no ficheiro kafka_client_config.txt
. Por exemplo, para
estabelecer ligação a um cluster do Managed Service for Apache Kafka
através das
credenciais predefinidas da aplicação
com o Google OAuth, este segredo deve incluir as seguintes propriedades:
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;
Substitua BOOTSTRAP_SERVER_LIST pela lista HOST:PORT
do cluster Kafka.
A utilização de credenciais predefinidas da aplicação com um cluster do Managed Service for Apache Kafka também requer a concessão da função Managed Kafka Client (roles/managedkafka.client
) à conta de serviço do escalador automático do Kafka:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/managedkafka.client"
Substitua o seguinte:
- SCALER_SERVICE_ACCOUNT: o nome da conta de serviço do redimensionador automático do Kafka.
- PROJECT_ID: o ID do projeto para o serviço de escalamento automático do Kafka.
Para criar o segredo, que será montado como um volume na implementação, use o ficheiro
kafka_client_config.txt
:
gcloud secrets create ADMIN_CLIENT_SECRET_NAME --data-file=kafka_client_config.txt
Substitua ADMIN_CLIENT_SECRET_NAME pelo nome do segredo de autenticação do Kafka.
Configure o dimensionamento
O escalador automático do Kafka lê a respetiva configuração de escalamento a partir do volume /scaler-config/scaling
. O conteúdo deste volume deve ser formatado como YAML. Recomendamos que monte um volume secreto para esta configuração.
Crie um ficheiro denominado scaling_config.yaml
com a seguinte configuração:
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
Substitua o seguinte:
- PROJECT_ID: o ID do projeto da carga de trabalho do consumidor do Kafka a ser dimensionada automaticamente.
- REGION: a região da carga de trabalho do consumidor do Kafka a ser dimensionada automaticamente.
- CONSUMER_SERVICE_NAME: o nome da carga de trabalho do consumidor do Kafka a ser dimensionada automaticamente.
- TARGET_CPU_UTILIZATION: a utilização da CPU alvo para cálculos de dimensionamento automático, por exemplo:
60
. - LAG_THRESHOLD: o limite da métrica
consumer_lag
para acionar o ajuste de escala automático, por exemplo:1000
. - (Opcional) CPU_ACTIVATION_THRESHOLD: o limite de ativação da CPU. Quando todas as métricas estão inativas, o consumidor-alvo é reduzido a zero. A predefinição é
0
. - (Opcional) CPU_TOLERANCE: um limite que impede alterações de dimensionamento se estiver dentro do intervalo especificado. Expresso como uma percentagem da utilização da CPU alvo. A predefinição é
0.1
. - (Opcional) CPU_METRIC_WINDOW: um período de tempo, em segundos, durante o qual a utilização média da CPU é calculada. A predefinição é
120
. - (Opcional) LAG_ACTIVATION_THRESHOLD: o limite de ativação para a métrica
consumer_lag
. Quando todas as métricas estão inativas, o consumidor-alvo é reduzido a zero. A predefinição é0
. - (Opcional) LAG_TOLERANCE: um limite que impede alterações de dimensionamento se estiver dentro do intervalo especificado. Expresso como uma percentagem do atraso do consumidor-alvo. A predefinição é
0.1
.
Opcionalmente, pode configurar propriedades de dimensionamento avançadas através de um bloco behavior:
.
Este bloco suporta muitas das mesmas propriedades
que as políticas de escalabilidade do HPA do Kubernetes.
Se não especificar um bloco behavior
, é usada a seguinte configuração predefinida:
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 criar o volume secreto, que será montado na implementação,
copie a configuração para um ficheiro denominado scaling_config.yaml
e, em seguida,
execute o seguinte:
gcloud secrets create SCALING_CONFIG_SECRET_NAME --data-file=scaling_config.yaml
Substitua SCALING_CONFIG_SECRET_NAME pelo nome do segredo de escalabilidade.
Implemente o redimensionador automático do Kafka
Depois de concluir os pré-requisitos, pode implementar o serviço de escalamento automático do Kafka e a respetiva infraestrutura de apoio. É disponibilizado um módulo do Terraform e um script de shell para simplificar este processo.
gcloud
Esta secção explica cada comando gcloud necessário para implementar manualmente o escalador automático. Na maioria dos casos, recomendamos que use o script de shell ou o módulo Terraform.
Criar uma conta de serviço
Os requisitos da conta de serviço dependem do intervalo de verificação do ajuste de escala automático que configurou. Pode configurar o escalamento automático do Kafka para fazer verificações de escalamento automático a intervalos flexíveis:
- Um minuto ou mais: o Cloud Scheduler aciona a verificação do ajuste de escala automático com um pedido POST no intervalo selecionado.
Menos de 1 minuto: o Cloud Scheduler aciona a criação de várias Cloud Tasks a cada minuto, com base na frequência configurada.
Um ou mais minutos
Conta de serviço do escalador automático do Kafka
Crie uma conta de serviço para o redimensionador automático do Kafka:
gcloud iam service-accounts create SCALER_SERVICE_ACCOUNT
Substitua SCALER_SERVICE_ACCOUNT pelo nome da conta de serviço do escalador automático do Kafka.
O escalador automático do Kafka precisa das seguintes autorizações para atualizar o número de instâncias de consumidor do Kafka:
iam.serviceaccounts.actAs
para a conta de serviço do consumidor do Kafka.roles/artifactregistry.reader
para o repositório que contém a imagem do consumidor do Kafka.run.workerpools.get
erun.workerpools.update
selecionados. Estas autorizações estão incluídas na função de administrador do Cloud Run (roles/run.admin
).roles/secretmanager.secretAccessor
para os segredos de autenticação de dimensionamento e do Kafka.roles/monitoring.viewer
para o projeto do consumidor do Kafka. Esta função é necessária para ler as métricas de utilização da CPU.roles/monitoring.metricWriter
para o projeto do consumidor do Kafka. Esta função é opcional, mas permite que o dimensionador automático emita métricas personalizadas para uma melhor observabilidade.
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
Substitua o seguinte:
- PROJECT_ID: o ID do projeto onde o serviço de redimensionador automático do Kafka está localizado.
- CONSUMER_SERVICE_ACCOUNT_EMAIL: o email da conta de serviço para o consumidor do Kafka. Por exemplo,
example@PROJECT-ID.iam.gserviceaccount.com
. - SCALER_SERVICE_ACCOUNT: a conta de serviço do escalador automático do Kafka.
- ADMIN_CLIENT_SECRET_NAME: o nome do segredo de autenticação do Kafka.
- SCALING_CONFIG_SECRET_NAME: o nome do segredo de escalabilidade.
- CONSUMER_IMAGE_REPO: o ID ou o identificador totalmente qualificado do repositório com a imagem do contentor para o consumidor do Kafka.
- REPO_REGION: a localização do repositório de imagens do consumidor.
Menos de um minuto
Configure o Cloud Tasks
O Cloud Scheduler só pode ser acionado em intervalos de um minuto ou mais. Para intervalos inferiores a um minuto, use o Cloud Tasks para acionar o escalador automático do Kafka. A configuração do Cloud Tasks requer o seguinte:
- Criar a fila do Cloud Tasks para as tarefas de verificação do redimensionamento automático.
- Criar a conta de serviço que o Cloud Tasks usa para invocar o escalador automático do Kafka com a função 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"
Substitua o seguinte:
- CLOUD_TASKS_QUEUE_NAME: a fila do Cloud Tasks configurada para acionar verificações de escalamento automático.
- TASKS_SERVICE_ACCOUNT: a conta de serviço que o Cloud Tasks deve usar para acionar verificações de escalamento automático.
- SCALER_SERVICE_NAME: o nome do seu serviço de redimensionamento automático do Kafka.
- PROJECT_ID: o ID do projeto para o serviço de escalamento automático do Kafka.
- REGION: a localização do serviço de redimensionamento automático do Kafka.
Configure a conta de serviço do escalador automático do Kafka
Crie uma conta de serviço para o redimensionador automático do Kafka:
gcloud iam service-accounts create SCALER_SERVICE_ACCOUNT
Substitua SCALER_SERVICE_ACCOUNT pelo nome da conta de serviço do escalador automático do Kafka.
Para atualizar o número de instâncias de consumidor do Kafka e criar tarefas para verificações de escalamento automático, o redimensionador automático do Kafka precisa das seguintes autorizações:
iam.serviceaccounts.actAs
para a conta de serviço do consumidor do Kafka.roles/artifactregistry.reader
para o repositório que contém a imagem do consumidor do Kafkarun.workerpools.get
erun.workerpools.update
selecionados. Estas autorizações estão incluídas na função de administrador do Cloud Run (roles/run.admin
).roles/secretmanager.secretAccessor
para ambos os segredos para o dimensionamento e a autenticação do Kafka.roles/monitoring.viewer
para o projeto do consumidor do Kafka. Esta função é necessária para ler as métricas de utilização da CPU.roles/monitoring.metricWriter
para o projeto do consumidor do Kafka. Esta função é opcional, mas permite que o dimensionador automático emita métricas personalizadas para uma melhor observabilidade.- Função 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
Substitua o seguinte:
- PROJECT_ID: o ID do projeto onde o serviço de redimensionador automático do Kafka está localizado.
- CONSUMER_SERVICE_ACCOUNT_EMAIL: o email da conta de serviço para o consumidor do Kafka. Por exemplo,
example@PROJECT_ID.iam.gserviceaccount.com
. - SCALER_SERVICE_ACCOUNT: a conta de serviço do escalador automático do Kafka.
- CONSUMER_IMAGE_REPO: o ID ou o identificador totalmente qualificado do repositório com a imagem do contentor para o consumidor do Kafka.
- ADMIN_CLIENT_SECRET_NAME: o nome do segredo de autenticação do Kafka.
- SCALING_CONFIG_SECRET_NAME: o nome do segredo de escalabilidade.
- REPO_REGION: a localização do repositório de imagens do consumidor.
- CLOUD_TASKS_QUEUE_NAME: a fila do Cloud Tasks configurada para acionar verificações de escalamento automático.
- REGION: a localização do serviço de redimensionamento automático do Kafka.
Configure variáveis de ambiente
Um ou mais minutos
O escalador automático do Kafka usa variáveis de ambiente para especificar o consumidor do Kafka e outros aspetos da carga de trabalho de destino. Por motivos de segurança, recomendamos que configure as informações confidenciais como segredos.
Crie um ficheiro YAML denominado scaler_env_vars.yaml
com as seguintes variáveis:
KAFKA_TOPIC_ID: KAFKA_TOPIC_ID CONSUMER_GROUP_ID: CONSUMER_GROUP_ID CYCLE_SECONDS: CYCLE_SECONDS OUTPUT_SCALER_METRICS: OUTPUT_SCALER_METRICS
Substitua o seguinte:
- KAFKA_TOPIC_ID: o ID do tópico ao qual os consumidores do Kafka subscrevem.
- CONSUMER_GROUP_ID: o ID do grupo de consumidores que o consumidor Kafka de destino usa. Estes valores têm de corresponder, caso contrário, o ajuste de escala automático falha.
- CYCLE_SECONDS: o período do ciclo do escalador automático, em segundos.
- OUTPUT_SCALER_METRICS: a definição para ativar as métricas. Defina o valor como
true
para ativar a saída de métricas personalizadas ou comofalse
caso contrário.
Menos de um minuto
O escalador automático do Kafka usa variáveis de ambiente para especificar o consumidor do Kafka e outros aspetos da carga de trabalho de destino. Por motivos de segurança, recomendamos que configure as informações confidenciais como segredos.
Crie um ficheiro YAML denominado scaler_env_vars.yaml
com as seguintes variáveis:
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
Substitua o seguinte:
- KAFKA_TOPIC_ID: o ID do tópico ao qual os consumidores do Kafka subscrevem.
- CONSUMER_GROUP_ID: o ID do grupo de consumidores que o consumidor Kafka de destino usa. Estes valores têm de corresponder, caso contrário, o ajuste de escala automático falha.
- CYCLE_SECONDS: o período do ciclo do escalador automático, em segundos.
- OUTPUT_SCALER_METRICS: a definição para ativar as métricas. Defina o valor como
true
para ativar a saída de métricas personalizadas oufalse
caso contrário. - CLOUD_TASKS_QUEUE_NAME: o nome totalmente qualificado da fila do Cloud Tasks
para acionar verificações de escalamento automático. Tem o seguinte formato:
projects/$PROJECT_ID/locations/$REGION/queues/$CLOUD_TASKS_QUEUE_NAME
. - TASKS_SERVICE_ACCOUNT_EMAIL: a conta de serviço que o Cloud Tasks deve usar para acionar verificações de escalamento automático. Por exemplo,
example@PROJECT_ID.iam.gserviceaccount.com
.
Implemente o escalador automático do Kafka através da imagem fornecida e estabeleça ligação à VPC do Kafka
com o ficheiro scaler_env_vars.yaml
e as montagens de volume secreto:
gcloud run deploy SCALER_SERVICE_NAME \
--image=SCALER_IMAGE_URI \
--env-vars-file=scaler_env_vars.yaml \
--service-account=SCALER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com \
--no-allow-unauthenticated \
--network=KAFKA_VPC_NETWORK \
--subnet=KAFKA_VPC_SUBNET \
--update-secrets=/kafka-config/kafka-client-properties=ADMIN_CLIENT_SECRET_NAME:latest \
--update-secrets=/scaler-config/scaling=SCALING_CONFIG_SECRET_NAME:latest
--labels=created-by=kafka-autoscaler
Substitua o seguinte:
- SCALER_IMAGE_URI: o URI da imagem do redimensionador automático do Kafka.
- SCALER_SERVICE_NAME: o nome do seu serviço de redimensionamento automático do Kafka.
- SCALER_SERVICE_ACCOUNT: o nome da conta de serviço do redimensionador automático do Kafka.
- PROJECT_ID: o ID do projeto para o serviço de escalamento automático do Kafka.
- KAFKA_VPC_NETWORK: a rede VPC que está ligada ao cluster Kafka.
- KAFKA_VPC_SUBNET: a sub-rede da VPC que está ligada ao cluster Kafka.
- ADMIN_CLIENT_SECRET_NAME: o nome do segredo de autenticação do Kafka.
- SCALING_CONFIG_SECRET_NAME: o nome do segredo de escalabilidade.
Configure verificações de ajuste de escala automático periódicas
Nesta secção, usa o Cloud Scheduler para acionar verificações de escalamento automático periódico:
- Um minuto ou mais: configure o Cloud Scheduler para ser acionado no intervalo selecionado
- Menos de um minuto: configure o Cloud Scheduler para ser acionado a cada minuto
Crie uma conta de serviço de invocador
Para permitir que o Cloud Scheduler chame o escalador automático do Kafka, tem de criar uma conta de serviço com a função de invocador (roles/run.invoker
) no serviço do escalador automático do 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"
Substitua o seguinte:
- SCALER_SERVICE_NAME: o nome do seu serviço de redimensionamento automático do Kafka.
- SCALER_INVOKER_SERVICE_ACCOUNT: o nome da conta de serviço do invocador.
- PROJECT_ID: o ID do projeto para o serviço de escalamento automático do Kafka.
Crie uma tarefa do Cloud Scheduler
Um ou mais minutos
Crie uma tarefa do Cloud Scheduler com o intervalo de verificação do dimensionamento automático selecionado:
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
Substitua o seguinte:
- SCALER_SERVICE_NAME: o nome do seu serviço de redimensionamento automático do Kafka.
- SCALER_INVOKER_SERVICE_ACCOUNT: o nome da conta de serviço do invocador.
- PROJECT_ID: o ID do projeto ou o serviço de escalamento automático do Kafka.
- PROJECT_NUMBER: o número do projeto do serviço de dimensionamento automático do Kafka.
- REGION: a localização do serviço de redimensionamento automático do Kafka.
- TIMEZONE: o fuso horário, por exemplo:
America/Los_Angeles
. - CRON_SCHEDULE: o horário selecionado no formato Crontab. Por exemplo, a cada minuto:
"* * * * *"
.
Menos de um minuto
Crie uma tarefa do Cloud Scheduler que é executada a 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
Substitua o seguinte:
- SCALER_SERVICE_NAME: o nome do seu serviço de redimensionamento automático do Kafka.
- SCALER_INVOKER_SERVICE_ACCOUNT: o nome da conta de serviço do invocador.
- PROJECT_ID: o ID do projeto do serviço de redimensionamento automático do Kafka.
- PROJECT_NUMBER: o número do projeto do serviço de dimensionamento automático do Kafka.
- REGION: a localização do serviço de redimensionamento automático do Kafka.
- TIMEZONE: o fuso horário, por exemplo:
America/Los_Angeles
.
terraformar
O diretório terraform/
contém um módulo Terraform reutilizável que pode usar para aprovisionar o escalador automático do Kafka e os respetivos recursos associados.
Este módulo automatiza a criação do seguinte:
- O serviço do Cloud Run do escalador automático do Kafka
- Suporte de contas de serviço e associações da IAM
- Fila do Cloud Tasks
- Tarefa do Cloud Scheduler
Para ver instruções detalhadas, exemplos de utilização e descrições de todas as variáveis de entrada/saída, consulte o artigo terraform readme
.
Tem de fornecer as variáveis necessárias ao módulo do Terraform, incluindo detalhes dos pré-requisitos, como o ID do projeto, a região, o email da SA do consumidor, os nomes dos segredos, o caminho da imagem do escalador e o ID do tópico.
shell
É fornecido um setup_kafka_scaler.sh
script com o redimensionador automático para criar e configurar automaticamente todos os recursos necessários.
Defina variáveis de ambiente
Antes de executar o script, certifique-se de que definiu todas as variáveis de ambiente necessárias:
# 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).
Substitua o seguinte:
- PROJECT_ID: o ID do projeto onde o serviço de redimensionador automático do Kafka está localizado.
- REGION: a localização do serviço de redimensionamento automático do Kafka.
- DEPLOYED_KAFKA_CONSUMER: o nome do consumidor do Kafka.
- KAFKA_CONSUMER_ACCOUNT_EMAIL: o email da conta de serviço para o consumidor do Kafka.
- KAFKA_TOPIC_ID: o ID do tópico ao qual os consumidores do Kafka subscrevem.
- KAFKA_CONSUMER_GROUP_ID: o ID do grupo de consumidores que o consumidor Kafka de destino usa. Estes valores têm de corresponder, caso contrário, o ajuste de escala automático falha.
- VPC_NETWORK: a rede VPC ligada ao cluster Kafka.
- VPC_SUBNET: a sub-rede da VPC que está ligada ao cluster Kafka.
- CLOUD_TASKS_QUEUE_FOR_SCALING_CHECKS: a fila do Cloud Tasks configurada para acionar verificações de escalamento automático.
- TASKS_SERVICE_ACCOUNT_NAME: a conta de serviço que o Cloud Tasks deve usar para acionar verificações de escalamento automático.
- KAFKA_AUTOSCALER_SERVICE_NAME: o nome do seu serviço de redimensionamento automático do Kafka.
- KAFKA_AUTOSCALER_IMAGE_URI: o URI da imagem do redimensionador automático do Kafka.
- KAFKA_AUTOSCALER_CONFIG_SECRET_NAME: o nome do segredo de escalabilidade.
- SCALER_CHECK_FREQUENCY: o período do ciclo do escalador automático, em segundos.
Execute o script de configuração
Execute o script setup_kafka_scaler.sh
fornecido:
./setup_kafka_scaler.sh
O script realiza as seguintes ações:
- Cria a fila do Cloud Tasks usada para acionar verificações de escalamento automático.
- Cria a conta de serviço do redimensionador automático do Kafka e concede as autorizações necessárias.
- Configura e implementa o redimensionador automático do Kafka.
- Cria a tarefa do Cloud Scheduler que aciona periodicamente as verificações de escalamento automático.
Quando o script setup_kafka_scaler.sh
é executado, produz as variáveis de ambiente configuradas. Verifique se as variáveis de ambiente estão corretas antes de continuar.
Conceda autorizações adicionais
Para alterar a contagem de instâncias do consumidor do Kafka, a conta de serviço do escalador automático do Kafka tem de ter autorização de visualização na imagem do contentor implementada. Por exemplo, se a imagem do consumidor tiver sido implementada a partir do Artifact Registry, execute o seguinte 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
Verifique se o ajuste de escala automático do Kafka está a funcionar
A escalabilidade do serviço de escala automática do Kafka é acionada com um pedido ao URL do serviço (SCALER_SERVICE_NAME-
PROJECT_NUMBER.
REGION.run.app
).
Pode enviar um POST
pedido ao serviço de escalamento automático do Kafka para acionar o cálculo do escalamento automático:
curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" https://SCALER_SERVICE_NAME-PROJECT_NUMBER.REGION.run.app
Substitua o seguinte:
- SCALER_SERVICE_NAME: o nome do seu serviço de redimensionamento automático do Kafka.
- PROJECT_NUMBER: o número do projeto do serviço de dimensionamento automático do Kafka.
- REGION: a localização do serviço de redimensionamento automático do Kafka.
Os pedidos POST
acionam o cálculo da criação de escala automática, o resultado é registado e altera a quantidade de instâncias com base na recomendação.
Os registos do seu serviço de escalamento automático do Kafka devem incluir mensagens como [SCALING] Recommended instances X
.
Se a flag OUTPUT_SCALER_METRICS
estiver ativada, também pode encontrar métricas do Cloud Monitoring dimensionadas em custom.googleapis.com/cloud-run-kafkascaler
.
Configuração de dimensionamento avançada
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]
A lista seguinte descreve alguns dos elementos anteriores:
scaleDown
: o comportamento quando se reduz o número de instâncias (redução da escala).scaleUp
: o comportamento quando aumenta a quantidade de instâncias (escalar verticalmente).stabilizationWindowSeconds
: o mais elevado (scaleDown
) ou o mais baixo (scaleUp
). Contagem de instâncias calculada durante um período contínuo. Se definir o valor como0
, significa que é usado o valor calculado mais recente.selectPolicy
: o resultado a aplicar quando são configuradas várias políticas.Min
: a alteração mais pequenaMax
: a maior alteraçãoPercent
: as alterações por período estão limitadas à percentagem configurada do total de instâncias.Instances
: as alterações por período estão limitadas ao número de instâncias configurado.periodSeconds
: o período durante o qual a política é aplicada.
Por exemplo, a especificação completa, com a configuração predefinida, tem o seguinte aspeto:
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