Todos os produtos
Search
Central de documentação

Elastic Compute Service:Deploy a Kafka cluster with eRDMA for high-throughput, low-latency messaging

Última atualização: Jul 03, 2026

Implante um cluster Kafka em instâncias ECS com eRDMA habilitado para reduzir a latência entre nós e a sobrecarga de CPU, além de avaliar o ganho de desempenho.

Nota
  • O Kafka é uma plataforma distribuída de processamento de fluxos que processa e armazena streams de dados, com suporte à publicação e assinatura de mensagens em tempo real. Essa tecnologia é amplamente utilizada em cenários como agregação de logs, event sourcing e análises em tempo real. Consulte a documentação do Kafka.

  • O eRDMA é um serviço de Remote Direct Memory Access (RDMA) desenvolvido pela Alibaba Cloud que oferece baixa latência, alto throughput e alta elasticidade. Consulte a Visão geral.

Etapa 1: Prepare as instâncias ECS

Antes de implantar o cluster Kafka, prepare as instâncias ECS para Broker, ZooKeeper e testes de estresse.

  • A instância Broker atua como nó central de dados, armazenando, transmitindo e gerenciando mensagens.

  • A instância ZooKeeper gerencia a coordenação distribuída do cluster Kafka.

  • A instância de teste de estresse avalia o desempenho do cluster Kafka.

Este exemplo utiliza cinco instâncias ECS: uma para ZooKeeper, três para Broker e uma para testes de estresse. A tabela a seguir lista os requisitos de configuração.

Importante

Os tipos de instância selecionados devem oferecer suporte ao eRDMA. Consulte as Limitações no tópico "Configurar eRDMA em uma instância de nível empresarial" para verificar os tipos de instância compatíveis.

Finalidade

Requisito da instância

Requisito de disco

Requisito de rede

Requisito de imagem

Instância com Broker habilitado

Três instâncias. Este exemplo usa ecs.g8a.2xlarge.

SSDs empresariais (ESSDs) PL3. Selecione a capacidade conforme suas necessidades de negócio.

  • Configure endereços IP públicos nas instâncias.

  • Implante todas as instâncias na mesma Virtual Private Cloud (VPC). Por padrão, instâncias na mesma VPC se comunicam pela rede interna.

  • Ative o eRDMA nas instâncias. Consulte Configurar eRDMA em uma instância de nível empresarial.

Alibaba Cloud Linux 3.2104 LTS 64 bits.

Instância com ZooKeeper habilitado

Uma instância. Este exemplo usa ecs.g8a.xlarge.

Nenhum.

Instância de teste de estresse

Uma instância. Este exemplo usa ecs.g8a.16xlarge.

Nenhum.

Etapa 2: Instale as ferramentas necessárias e o Kafka

Faça login em cada instância ECS da Etapa 1 e instale SMC-R, Java e Kafka.

Nota

O eRDMA requer SMC-R, uma pilha de protocolos no espaço do kernel que gerencia recursos de eRDMA. Consulte Usar SMC.

  1. Acesse todas as instâncias ECS.

    Consulte Conectar-se a uma instância Linux usando senha ou chave.

  2. (Condicionalmente obrigatório) Execute uname -r para verificar a versão do kernel. Certifique-se de que a versão seja 5.10.134-16.3 ou posterior. Se for anterior a 5.10.134-16.3, atualize o kernel:

    sudo yum update kernel
    sudo reboot
  3. Instale o smc-tools em cada instância:

    sudo yum install smc-tools -y
  4. Verifique se o eRDMA está ativado em cada instância:

    smcr dev

    Saída de exemplo:

    Net-Dev IB-Dev IB-P IB-State Type Crit #Links PNET-ID 
    eth0 erdma_0 1 ACTIVE 0x107f No 0 
  5. Desative o IPv6 em cada instância.

    Nota

    Os dispositivos eRDMA e SMC da Alibaba Cloud não suportam IPv6. Desativar o IPv6 garante que o tráfego flua pelos canais RDMA IPv4.

    sudo sysctl net.ipv6.conf.all.disable_ipv6=1
  6. Instale Java e Git:

    sudo yum install java-11-openjdk-1:11.0.21.0.9-2.0.3.al8 java-11-openjdk-devel-1:11.0.21.0.9-2.0.3.al8 git -y
  7. Baixe e descompacte o pacote do Kafka:

    wget https://archive.apache.org/dist/kafka/3.5.0/kafka_2.13-3.5.0.tgz
    tar -xf kafka_2.13-3.5.0.tgz

Acessar instâncias individualmente

  1. Acesse todas as instâncias ECS.

    Consulte Conectar-se a uma instância Linux usando senha ou chave.

  2. (Condicionalmente obrigatório) Execute uname -r para verificar a versão do kernel. Certifique-se de que a versão seja 5.10.134-16.3 ou posterior. Se for anterior a 5.10.134-16.3, atualize o kernel:

    sudo yum update kernel
    sudo reboot
  3. Instale o smc-tools em todas as instâncias:

    sudo yum install smc-tools -y
  4. Verifique se o eRDMA está ativado em todas as instâncias:

    smcr dev

    Saída de exemplo:

    Net-Dev IB-Dev IB-P IB-State Type Crit #Links PNET-ID 
    eth0 erdma_0 1 ACTIVE 0x107f No 0 
  5. Desative o IPv6 em todas as instâncias.

    Nota

    Os dispositivos eRDMA e SMC da Alibaba Cloud não suportam IPv6. Desativar o IPv6 garante que o tráfego flua pelos canais RDMA IPv4.

    sudo sysctl net.ipv6.conf.all.disable_ipv6=1
  6. Instale Java e Git:

    sudo yum install java-11-openjdk-1:11.0.21.0.9-2.0.3.al8 java-11-openjdk-devel-1:11.0.21.0.9-2.0.3.al8 git -y
  7. Baixe e descompacte o Kafka:

    wget https://archive.apache.org/dist/kafka/3.5.0/kafka_2.13-3.5.0.tgz
    tar -xf kafka_2.13-3.5.0.tgz

Instalação em lote com o Cloud Assistant

Use o Cloud Assistant para instalar o SMC-R, desativar o IPv6, instalar Java e Git e baixar o Kafka em todas as instâncias.

  1. Faça login no console do ECS.

  2. No painel de navegação à esquerda, escolha Maintenance & Monitoring > Cloud Assistant.

  3. No canto superior esquerdo da página, selecione uma região e um grupo de recursos.地域

  4. Clique em Create/Run Command e configure os seguintes parâmetros (mantenha os demais parâmetros com seus valores padrão; consulte Enviar comandos remotos para mais detalhes).

    • Tipo de comando: Shell

    • Conteúdo do comando: Cole o conteúdo a seguir.

      sudo yum update kernel -y
      sudo reboot exit 194
      sudo yum install smc-tools -y
      sudo sysctl net.ipv6.conf.all.disable_ipv6=1
      sudo yum install java-11-openjdk-1:11.0.21.0.9-2.0.3.al8 java-11-openjdk-devel-1:11.0.21.0.9-2.0.3.al8 git -y
      wget https://archive.apache.org/dist/kafka/3.5.0/kafka_2.13-3.5.0.tgz
      tar -xf kafka_2.13-3.5.0.tgz
    • Tempo limite: 600 segundos.

    • Select instances: Selecione todas as instâncias criadas na Etapa 1.

  5. Clique em Run and Save ou Run.

    Quando o status exibir Successfully Executed, todas as instalações estarão concluídas.

Etapa 3: Inicie o ZooKeeper e o Broker do Kafka

  1. Acesse todas as instâncias ECS.

  2. Adicione o mapeamento entre o endereço IP privado e o nome do host de cada instância ao arquivo /etc/hosts.

    image

  3. Inicie o ZooKeeper na instância correspondente:

    bash $HOME/kafka_2.13-3.5.0/bin/zookeeper-server-start.sh -daemon $HOME/kafka_2.13-3.5.0/config/zookeeper.properties
  4. Inicie o Broker em cada instância Broker.

    Nota

    Para testar sem eRDMA, remova o parâmetro smc_run do comando.

    • Na primeira instância Broker, defina o ID do Broker como 0 e inicie o serviço. Substitua <zookeeper ip> pelo endereço IP privado da instância ZooKeeper.

      KAFKA_HEAP_OPTS="-Xmx4G -Xms4G" smc_run bash $HOME/kafka_2.13-3.5.0/bin/kafka-server-start.sh -daemon $HOME/kafka_2.13-3.5.0/config/server.properties --override broker.id=0 --override log.dirs=$HOME/kafka-logs --override zookeeper.connect=<zookeeper ip>:2181
    • Na segunda instância Broker, defina o ID do Broker como 1 e inicie o serviço. Substitua <zookeeper ip> pelo endereço IP privado da instância ZooKeeper.

      KAFKA_HEAP_OPTS="-Xmx4G -Xms4G" smc_run bash $HOME/kafka_2.13-3.5.0/bin/kafka-server-start.sh -daemon $HOME/kafka_2.13-3.5.0/config/server.properties --override broker.id=1 --override log.dirs=$HOME/kafka-logs --override zookeeper.connect=<zookeeper ip>:2181
    • Na terceira instância Broker, defina o ID do Broker como 2 e inicie o serviço. Substitua <zookeeper ip> pelo endereço IP privado da instância ZooKeeper.

      KAFKA_HEAP_OPTS="-Xmx4G -Xms4G" smc_run bash $HOME/kafka_2.13-3.5.0/bin/kafka-server-start.sh -daemon $HOME/kafka_2.13-3.5.0/config/server.properties --override broker.id=2 --override log.dirs=$HOME/kafka-logs --override zookeeper.connect=<zookeeper ip>:2181

Etapa 4: Teste o desempenho do Kafka

Baixe a ferramenta Benchmark e configure-a para obter a largura de banda máxima da rede. Teste o desempenho do Kafka com e sem eRDMA e compare os resultados.

  1. Acesse a instância de teste de estresse, baixe e compile o Open Messaging Benchmark.

    1. Baixe e instale o Maven, o compilador do Open Messaging Benchmark.

      wget https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz
      tar -xf apache-maven-3.8.8-bin.tar.gz
      export PATH=$PATH:$HOME/apache-maven-3.8.8/bin/
    2. Configure o mirror do Maven para acelerar os downloads.

      vi $HOME/apache-maven-3.8.8/conf/settings.xml

      Adicione o conteúdo abaixo à tag settings.xml mirrors, salve e feche o arquivo.

      <mirror>
          <id>nexus-aliyun</id>
          <mirrorOf>central</mirrorOf>
          <name>Nexus aliyun</name>
          <url>http://maven.aliyun.com/nexus/content/groups/public</url>
      </mirror>
    3. Baixe e compile o Open Messaging Benchmark:

      git clone https://github.com/openmessaging/benchmark.git
      cd benchmark && mvn clean verify -DskipTests
  2. Configure os endereços IP do Broker no arquivo kafka-throughput.yaml.

    vi $HOME/benchmark/driver-kafka/kafka-throughput.yaml

    Defina bootstrap.servers com os endereços IP privados das instâncias Broker: <Private IP address of Broker 0>:9092,<Private IP address of Broker 1>:9092,<Private IP address of Broker 2>:9092.

    commonConfig: |
      bootstrap.servers=<172.17.XX.XX>:9092,<172.17.XX.XX>:9092,<172.17.XX.XX>:9092
      default.api.timeout.ms=1200000
      request.timeout.ms=1200000
  3. Defina a taxa de envio de mensagens para saturar a largura de banda disponível.

    vi $HOME/benchmark/workloads/1-topic-100-partitions-1kb-4p-4c-200k.yaml

    Altere producerRate: <Message sending rate> . A taxa é calculada como: Available bandwidth of a Broker-enabled instance/Size of a single message.

    Neste exemplo, cada Broker usa ecs.g8a.2xlarge (máximo de 4 Gbit/s). A largura de banda total dos três Brokers é de 12 Gbit/s. Devido ao mecanismo de triplicação do Kafka, a available bandwidth of a Broker-enabled instance é 12/3 = 4 Gbit/s (512 MB/s). Com tamanho de mensagem de 1 KB no diretório workloads, a message sending rate é 512 MB/s / 1 KB = 524.288. Defina producerRate: <Message sending rate> como producerRate: 524288. Ajuste a taxa conforme suas necessidades reais.

  4. Teste o desempenho do cluster Kafka usando um dos métodos a seguir.

    Realizar teste de desempenho com eRDMA ativado

    smc_run $HOME/benchmark/bin/benchmark --drivers $HOME/benchmark/driver-kafka/kafka-throughput.yaml $HOME/benchmark/workloads/1-topic-100-partitions-1kb-4p-4c-2000k.yaml

    Durante o teste, você também pode:

    • Executar smcss -a em outra janela da instância de teste de estresse para verificar se o SMC-R está transmitindo mensagens.

    • Executar sar em cada instância Broker para verificar a utilização da CPU. Por exemplo, sar 1 20 coleta amostras a cada segundo por 20 vezes. Some a utilização de CPU das três instâncias Broker para obter o total.

    Realizar teste de desempenho com eRDMA desativado

    $HOME/benchmark/bin/benchmark --drivers $HOME/benchmark/driver-kafka/kafka-throughput.yaml $HOME/benchmark/workloads/1-topic-100-partitions-1kb-4p-4c-2000k.yaml
    Importante

    Para evitar que dados residuais afetem o teste sem eRDMA, exclua os registros do Broker e do ZooKeeper e reinicie ambos os serviços.

    Excluir e reiniciar Broker e ZooKeeper

    • Pare o ZooKeeper e exclua seus registros:

      bash $HOME/kafka_2.13-3.5.0/bin/zookeeper-server-stop.sh
      rm -rf /tmp/zookeeper/
    • Reinicie o ZooKeeper:

      bash $HOME/kafka_2.13-3.5.0/bin/zookeeper-server-start.sh -daemon $HOME/kafka_2.13-3.5.0/config/zookeeper.properties
    • Pare o Broker em cada instância Broker e exclua os registros:

      bash $HOME/kafka_2.13-3.5.0/bin/kafka-server-stop.sh
      rm -rf $HOME/kafka-logs/
    • Reinicie o Broker em cada instância Broker:

      KAFKA_HEAP_OPTS="-Xmx4G -Xms4G" smc_run bash $HOME/kafka_2.13-3.5.0/bin/kafka-server-start.sh -daemon $HOME/kafka_2.13-3.5.0/config/server.properties --override broker.id=0 --override log.dirs=$HOME/kafka-logs --override zookeeper.connect=<zookeeper ip>:2181
      KAFKA_HEAP_OPTS="-Xmx4G -Xms4G" smc_run bash $HOME/kafka_2.13-3.5.0/bin/kafka-server-start.sh -daemon $HOME/kafka_2.13-3.5.0/config/server.properties --override broker.id=1 --override log.dirs=$HOME/kafka-logs --override zookeeper.connect=<zookeeper ip>:2181
      KAFKA_HEAP_OPTS="-Xmx4G -Xms4G" smc_run bash $HOME/kafka_2.13-3.5.0/bin/kafka-server-start.sh -daemon $HOME/kafka_2.13-3.5.0/config/server.properties --override broker.id=2 --override log.dirs=$HOME/kafka-logs --override zookeeper.connect=<zookeeper ip>:2181
      • Substitua <zookeeper ip> pelo endereço IP privado da instância ZooKeeper.

      • Para testar sem eRDMA, remova o parâmetro smc_run do comando.

  5. Compare os resultados de latência de ambos os testes para avaliar o impacto do eRDMA no desempenho.

    Localize a última entrada Aggregated Pub Latency (ms). O valor avg representa a latência média, 99% é a latência P99 e 999% é a latência P999.