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.
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.
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. |
|
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.
O eRDMA requer SMC-R, uma pilha de protocolos no espaço do kernel que gerencia recursos de eRDMA. Consulte Usar SMC.
-
Acesse todas as instâncias ECS.
Consulte Conectar-se a uma instância Linux usando senha ou chave.
-
(Condicionalmente obrigatório) Execute
uname -rpara verificar a versão do kernel. Certifique-se de que a versão seja5.10.134-16.3ou posterior. Se for anterior a5.10.134-16.3, atualize o kernel:sudo yum update kernel sudo reboot -
Instale o smc-tools em cada instância:
sudo yum install smc-tools -y -
Verifique se o eRDMA está ativado em cada instância:
smcr devSaída de exemplo:
Net-Dev IB-Dev IB-P IB-State Type Crit #Links PNET-ID eth0 erdma_0 1 ACTIVE 0x107f No 0 -
Desative o IPv6 em cada instância.
NotaOs 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 -
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 -
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
-
Acesse todas as instâncias ECS.
Consulte Conectar-se a uma instância Linux usando senha ou chave.
-
(Condicionalmente obrigatório) Execute
uname -rpara verificar a versão do kernel. Certifique-se de que a versão seja5.10.134-16.3ou posterior. Se for anterior a5.10.134-16.3, atualize o kernel:sudo yum update kernel sudo reboot -
Instale o smc-tools em todas as instâncias:
sudo yum install smc-tools -y -
Verifique se o eRDMA está ativado em todas as instâncias:
smcr devSaída de exemplo:
Net-Dev IB-Dev IB-P IB-State Type Crit #Links PNET-ID eth0 erdma_0 1 ACTIVE 0x107f No 0 -
Desative o IPv6 em todas as instâncias.
NotaOs 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 -
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 -
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.
Faça login no console do ECS.
No painel de navegação à esquerda, escolha .
No canto superior esquerdo da página, selecione uma região e um grupo de recursos.
-
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.
-
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
Acesse todas as instâncias ECS.
-
Adicione o mapeamento entre o endereço IP privado e o nome do host de cada instância ao arquivo
/etc/hosts.
-
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 -
Inicie o Broker em cada instância Broker.
NotaPara testar sem eRDMA, remova o parâmetro
smc_rundo comando.-
Na primeira instância Broker, defina o ID do Broker como
0e 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
1e 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
2e 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.
-
Acesse a instância de teste de estresse, baixe e compile o Open Messaging Benchmark.
-
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/ -
Configure o mirror do Maven para acelerar os downloads.
vi $HOME/apache-maven-3.8.8/conf/settings.xmlAdicione 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> -
Baixe e compile o Open Messaging Benchmark:
git clone https://github.com/openmessaging/benchmark.git cd benchmark && mvn clean verify -DskipTests
-
-
Configure os endereços IP do Broker no arquivo kafka-throughput.yaml.
vi $HOME/benchmark/driver-kafka/kafka-throughput.yamlDefina
bootstrap.serverscom 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 -
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.yamlAltere
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órioworkloads, amessage sending rateé 512 MB/s / 1 KB = 524.288. DefinaproducerRate: <Message sending rate>comoproducerRate: 524288. Ajuste a taxa conforme suas necessidades reais. -
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.yamlDurante o teste, você também pode:
Executar
smcss -aem outra janela da instância de teste de estresse para verificar se o SMC-R está transmitindo mensagens.Executar
sarem cada instância Broker para verificar a utilização da CPU. Por exemplo,sar 1 20coleta 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.yamlImportantePara evitar que dados residuais afetem o teste sem eRDMA, exclua os registros do Broker e do ZooKeeper e reinicie ambos os serviços.
-
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 valoravgrepresenta a latência média, 99% é a latência P99 e 999% é a latência P999.