Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Event-driven autoscaling based on ApsaraMQ for RocketMQ metrics (KEDA)

Última atualização: Oct 14, 2026

Ao usar o ApsaraMQ for RocketMQ, o acúmulo de mensagens pode elevar excessivamente a carga do sistema e causar interrupções. Use o KEDA (Kubernetes Event-driven Autoscaling) para automatizar o Horizontal Pod Autoscaler (HPA) das suas aplicações com base nas métricas de acúmulo de mensagens do ApsaraMQ for RocketMQ, aumentando a confiabilidade e a estabilidade do sistema.

Contexto

O ApsaraMQ for RocketMQ é um middleware de mensagens distribuído de alto desempenho, alta confiabilidade e grande escalabilidade, amplamente usado em aplicações empresariais. No entanto, o acúmulo de mensagens ocorre facilmente durante o uso do ApsaraMQ for RocketMQ, especialmente sob alta carga. Esse acúmulo pode sobrecarregar o sistema e até mesmo causar indisponibilidade.

Nesse cenário, use a ferramenta de dimensionamento automático orientado a eventos do Kubernetes KEDA para acionar o Horizontal Pod Autoscaler das suas aplicações com base em métricas personalizadas de acúmulo de mensagens do ApsaraMQ for RocketMQ. Essa solução permite dimensionar suas aplicações de forma automática e eficiente, melhorando a confiabilidade e a estabilidade do sistema. Se você usa o Apache RocketMQ open source, também é possível obter funcionalidades semelhantes expondo os dados de mensagens por meio do JMX Prometheus Exporter. Para mais informações, consulte a comunidade Apache RocketMQ.

Este tópico usa o Managed Service for Prometheus como fonte de dados e descreve como configurar o objeto de dimensionamento para o escalonamento baseado em mensagens do ApsaraMQ for RocketMQ.

Pré-requisitos

  • O add-on ack-keda está implantado. Para mais informações, consulte Event-driven autoscaling.

  • Uma instância da série 5.x do ApsaraMQ for RocketMQ foi criada. Para mais informações, consulte Create an instance.

    Uma instância Serverless 5.x escala recursos rapidamente conforme a carga de negócios, permite alocar recursos e calcular taxas com base no uso real, além de reduzir custos de forma eficaz. Para mais informações, consulte 5.x Serverless Series.

  • O ApsaraMQ for RocketMQ (5.0) service está integrado ao Application Real-Time Monitoring Service (ARMS).

  • O ambiente de execução Go está instalado.

Etapa 1: Implantar uma carga de trabalho

Este exemplo cria uma aplicação NGINX de amostra chamada sample-app.

  1. Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.

  2. Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Workloads > Deployments.

  3. Na página Deployments, clique em Create from YAML. Conforme solicitado na página, defina Sample Template como Custom. Use o código de exemplo a seguir para criar uma aplicação NGINX chamada sample-app.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: sample-app
      namespace: default
      labels:
        app: sample-app
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: sample-app
      template:
        metadata:
          labels:
            app: sample-app
        spec:
          containers:
          - name: sample-app
            # Replace this with the image of your actual ApsaraMQ for RocketMQ consumer.
            image: alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/nginx_optimized:20240221-1.20.1-2.3.0  
            resources:
              limits:
                cpu: "500m"

Etapa 2: Configurar políticas de dimensionamento com um ScaledObject

Configure as políticas de dimensionamento do KEDA em um arquivo YAML ScaledObject, incluindo o alvo do dimensionamento, os números máximo e mínimo de réplicas e o limiar de dimensionamento (limiar de acúmulo de mensagens). Antes de configurar o ScaledObject, obtenha informações como a URL do Prometheus para as métricas da instância do ApsaraMQ for RocketMQ.

1. Obter informações da instância do ApsaraMQ for RocketMQ no console do ApsaraMQ for RocketMQ

  1. Faça login no ApsaraMQ for RocketMQ console. No painel de navegação à esquerda, clique em Instances.

  2. Na barra de navegação superior, selecione uma região, como China (Hangzhou). Na página Instances, clique no nome da instância que deseja gerenciar.

  3. No painel de navegação à esquerda, clique em Topic Management e, em seguida, visualize e anote o valor de Name e o Instance ID no canto superior direito, por exemplo, keda e mq-cn-uax3****.

2. Obter a fonte de dados Prometheus da instância do ApsaraMQ for RocketMQ no console do Managed Service for Prometheus

  1. Faça login no ARMS console.

  2. No painel de navegação à esquerda, escolha Managed Service for Prometheus > Instances.

  3. Para a instância alvo, clique em Cloud Services-{{RegionId}}. No painel de navegação à esquerda, clique em Settings e anote o HTTP API Address (Grafana Read Address).

    Selecione a URL do Public Endpoint.

3. Criar o arquivo YAML ScaledObject

  1. Use o conteúdo a seguir para criar o arquivo ScaledObject.yaml e configurar a política de dimensionamento.

    apiVersion: keda.sh/v1alpha1
    kind: ScaledObject
    metadata:
      name: prometheus-scaledobject
      namespace: default
    spec:
      scaleTargetRef:
        name: sample-app
      maxReplicaCount: 10
      minReplicaCount: 2
      triggers:
      - type: prometheus
        metadata:
          serverAddress: http://cn-beijing.arms.aliyuncs.com:9090/api/v1/prometheus/8cba801fff65546a3012e9a684****/****538168824185/cloud-product-rocketmq/cn-beijing
          metricName: rocketmq_consumer_inflight_messages
          query: sum({__name__=~"rocketmq_consumer_ready_messages|rocketmq_consumer_inflight_messages",instance_id="rmq-cn-uax3xxxxxx",topic=~"keda"}) by (consumer_group)
          threshold: '30'

    A tabela a seguir descreve os parâmetros.

    Parâmetro

    Descrição

    scaleTargetRef.name

    O alvo do dimensionamento. Neste exemplo, defina este parâmetro como a aplicação sample-app criada na Etapa 1: Implantar uma carga de trabalho.

    maxReplicaCount

    O número máximo de réplicas para escala horizontal (scale-out).

    minReplicaCount

    O número mínimo de réplicas para redução horizontal (scale-in).

    serverAddress

    A URL do Prometheus que armazena as métricas do ApsaraMQ for RocketMQ, correspondente ao HTTP API Address (Grafana Read Address) anotado anteriormente.

    metricName

    Os dados solicitados pela consulta PromQL.

    query

    Agrega os dados solicitados pela consulta PromQL em metricName. Neste exemplo, a agregação corresponde à PromQL para acúmulo de mensagens.

    threshold

    O limiar de dimensionamento. Este exemplo usa um acúmulo de 30 mensagens como limiar. Uma escala horizontal é acionada quando o acúmulo excede 30.

  2. Execute os comandos a seguir para implantar o arquivo e visualizar os recursos criados.

    # Apply the scaling configuration.
    kubectl apply -f ScaledObject.yaml
    scaledobject.keda.sh/prometheus-scaledobject created
    # Get the status of the scaling configuration.
    kubectl get ScaledObject
    NAME                      SCALETARGETKIND      SCALETARGETNAME   MIN   MAX   TRIGGERS     AUTHENTICATION   READY   ACTIVE   FALLBACK   AGE
    prometheus-scaledobject   apps/v1.Deployment   sample-app        2     10    prometheus                    True    False    False      105s
    # Check whether the HPA is generated.
    kubectl get hpa
    NAME                               REFERENCE               TARGETS      MINPODS   MAXPODS   REPLICAS   AGE
    keda-hpa-prometheus-scaledobject   Deployment/sample-app   0/30 (avg)   2         10        2          28m
  3. (Opcional) Use um token do Prometheus para aumentar a segurança na leitura de dados e configure a verificação desse token.

    Expand to view the detailed steps

    1. Gere um token do Prometheus conforme as instruções na página.

      Após a geração do token, a página exibe as informações de HTTP API Address (Grafana Read Address). Essas informações incluem o valor do token gerado, obtido integralmente pelos ícones de visualização e cópia. A página também lista as URLs de acesso ao Prometheus para os tipos de rede Public Endpoint e Internal Endpoint. Anote a URL e o valor do token necessários para configurar o arquivo YAML ScaledObject posteriormente.

    2. Crie um Secret no qual os valores dos campos customAuthHeader: "Authorization" e customAuthValue devem estar codificados em Base64.

      apiVersion: v1
      kind: Secret
      metadata:
        name: keda-prom-secret
        namespace: default
      data:
        customAuthHeader: "QXV0Xxxxxxxlvbg=="
        customAuthValue: "kR2tpT2lJeFpXSmxaVFV6WlMTxxxxxxxxRMVFE0TUdRdE9USXpaQzFqWkRZd09EZ3dOVFV5WWpZaWZRLjlDaFBYU0Q2dEhWc1dQaFlyMGh3ZU5FQjZQZWVETXFjTlYydVNqOU82TTQ="
    3. Use o código de exemplo a seguir para criar uma credencial que permita ao KEDA solicitar dados e implante-a no cluster.

      apiVersion: keda.sh/v1alpha1
      kind: TriggerAuthentication
      metadata:
        name: keda-prom-creds
        namespace: default
      spec:
        secretTargetRef:
          - parameter: customAuthHeader
            name: keda-prom-secret
            key: customAuthHeader
          - parameter: customAuthValue
            name: keda-prom-secret
            key: customAuthValue
    4. No arquivo YAML ScaledObject, configure o campo authenticationRef e especifique o nome da credencial criada.

      apiVersion: keda.sh/v1alpha1
      kind: ScaledObject
      metadata:
        name: prometheus-scaledobject
        namespace: default
      spec:
        scaleTargetRef:
          name: sample-app
        maxReplicaCount: 10
        minReplicaCount: 2
        triggers:
        - type: prometheus
          metadata:
            serverAddress: http://cn-beijing.arms.aliyuncs.com:9090/api/v1/prometheus/8cba801fff65546a3012e9a684****/****538168824185/cloud-product-rocketmq/cn-beijing
            metricName: rocketmq_consumer_inflight_messages
            query: sum({__name__=~"rocketmq_consumer_ready_messages|rocketmq_consumer_inflight_messages",instance_id="rmq-cn-uax3xxxxxx",topic=~"keda"}) by (consumer_group)
            threshold: '30'
            authModes: "custom"
          authenticationRef: # Configure this field.
              name: keda-prom-creds # Enter the name of the credential.
      Nota

      Este exemplo usa o tipo de autenticação Custom. Para usar outros métodos de autenticação, consulte a documentação da comunidade KEDA.

Etapa 3: Produzir e consumir dados

Este exemplo usa o projeto rocketmq-keda-sample para produzir e consumir dados. No código do projeto, configure o endpoint, o nome de usuário e a senha da instância do ApsaraMQ for RocketMQ anotados na Etapa 2.

Etapa 4: Acionar scale-out e scale-in produzindo e consumindo dados

  1. Faça login no ApsaraMQ for RocketMQ console. No painel de navegação à esquerda, clique em Instances.

  2. Na barra de menu superior, selecione uma região, como China (Hangzhou). Em seguida, na lista de instâncias, clique no nome da instância alvo para visualizar e anotar as Endpoint and Network Information.

  3. No painel de navegação à esquerda, clique em Access Control. Depois, clique na aba Intelligent Identity Recognition para visualizar e anotar o nome de usuário e a senha da instância.

  4. Execute o programa Producer para gerar dados e, em seguida, execute o comando abaixo para verificar o status de dimensionamento do HPA.

    kubectl get hpa

    Saída esperada:

    NAME                               REFERENCE               TARGETS           MINPODS   MAXPODS   REPLICAS   AGE
    keda-hpa-prometheus-scaledobject   Deployment/sample-app   32700m/30 (avg)   2         10        10         47m

    A saída esperada indica que a aplicação sample-app realizou scale-out até o número máximo de réplicas configurado para o KEDA.

  5. Interrompa o programa Producer, inicie o programa Consumer e execute o comando a seguir para acompanhar o status de dimensionamento do HPA.

    kubectl get hpa -w

    Saída esperada:

    NAME                               REFERENCE               TARGETS            MINPODS   MAXPODS   REPLICAS   AGE
    keda-hpa-prometheus-scaledobject   Deployment/sample-app   222500m/30 (avg)   2         10        10         50m
    keda-hpa-prometheus-scaledobject   Deployment/sample-app   232400m/30 (avg)   2         10        10         51m
    keda-hpa-prometheus-scaledobject   Deployment/sample-app   0/30 (avg)         2         10        10         52m
    keda-hpa-prometheus-scaledobject   Deployment/sample-app   0/30 (avg)         2         10        2          57m

    A saída esperada mostra que, algum tempo após o término do consumo de dados, a aplicação sample-app realiza scale-in até o número mínimo de réplicas configurado para o KEDA.

Referências

Também é possível usar o KEDA com base em métricas do RabbitMQ para monitorar o comprimento da fila e a taxa de mensagens. Para mais informações, consulte Autoscale pods based on RabbitMQ metrics.