A reatribuição de partições, a migração de réplicas entre brokers e a recuperação de brokers geram E/S de replicação que pode competir com o tráfego normal de produtores e consumidores. Aplique limitação para restringir essa E/S de manutenção e evitar impactos no tráfego de negócios.
Este documento aplica-se ao E-MapReduce (EMR) Kafka 2.4.1.
Parâmetros de limitação
Quatro parâmetros controlam a limitação de replicação. Dois são definidos no nível do tópico para selecionar quais réplicas limitar; os outros dois são configurados no nível do broker para restringir o throughput.
|
Parâmetro |
Escopo |
Descrição |
|
|
Tópico |
Réplicas líderes sujeitas à limitação de tráfego de manutenção. Formato: |
|
|
Tópico |
Réplicas seguidoras sujeitas à limitação de tráfego de manutenção. Mesmo formato acima. |
|
|
Broker |
Limite de throughput de leitura para réplicas líderes no broker (bytes por segundo). |
|
|
Broker |
Limite de throughput de gravação para réplicas seguidoras no broker (bytes por segundo). |
Observações de uso
Decida se deve limitar o tráfego de O&M com base na composição do tráfego, nos cenários de negócios e nos cenários operacionais do Kafka.
Defina o limiar de limitação considerando o volume real de tráfego de negócios, a tolerância a latência, a possibilidade de interrupção breve do serviço Kafka e a largura de banda de E/S dos discos e da rede.
Um limiar muito baixo pode paralisar totalmente a operação de manutenção. Já um valor excessivo pode causar problemas como competição de E/S ou saturação da largura de banda, afetando o tráfego normal de negócios.
Sempre que possível, agende as operações de manutenção fora dos horários de pico.
Consultar a configuração atual de limitação
Use kafka-configs.sh para inspecionar os parâmetros de limitação em qualquer broker ou tópico.
Consulte um broker:
kafka-configs.sh --bootstrap-server core-1-1:9092 -entity-type brokers --entity-name <broker-id> --describe
Consulte um tópico:
kafka-configs.sh --bootstrap-server core-1-1:9092 -entity-type topics --entity-name <topic-name> --describe
Limitar o tráfego durante a reatribuição de partições
O script kafka-reassign-partitions.sh aplica a limitação diretamente por meio do sinalizador --throttle. Após concluir a reatribuição, execute --verify para remover os parâmetros de limitação dos tópicos e brokers afetados.
A limitação aplica-se apenas ao tráfego de reatribuição, não às operações normais de busca de réplicas.
Para ajustar a limitação durante uma reatribuição em andamento, execute novamente
--executecom o novo valor de--throttle.Caso a reatribuição já tenha começado sem o uso de
--throttle, configureleader.replication.throttled.replicas,follower.replication.throttled.replicas,leader.replication.throttled.rateefollower.replication.throttled.ratediretamente comkafka-configs.sh.
Procedimento:
Faça login no nó mestre do cluster Kafka via SSH. Para mais detalhes, consulte Fazer login em um cluster.
-
Crie um tópico de teste.
kafka-topics.sh --bootstrap-server core-1-1:9092 --topic test-throttled --partitions 1 --replication-factor 3 --createVerifique os detalhes do tópico:
kafka-topics.sh --bootstrap-server core-1-1:9092 --topic test-throttled --describe -
Simule a gravação de dados para gerar tráfego em segundo plano.
kafka-producer-perf-test.sh --topic test-throttled --record-size 1000 --num-records 600000000 --print-metrics --throughput 10240 --producer-props acks=-1 linger.ms=0 bootstrap.servers=core-1-1:9092 -
Elabore um plano de reatribuição de partições. Crie um arquivo chamado
reassign.jsoncom o seguinte conteúdo:{"version":1,"partitions":[{"topic":"test-throttled","partition":0,"replicas":[2,0,3],"log_dirs":["any","any","any"]}]} -
Execute a reatribuição com limitação. Neste exemplo, a velocidade de gravação simulada é de 10 Mbit/s e a limitação está definida em 30 Mbit/s.
kafka-reassign-partitions.sh --bootstrap-server core-1-1:9092 --reassignment-json-file reassign.json --throttle 30000000 --executePara alterar a limitação durante a execução da reatribuição, execute novamente o comando com o novo valor:
kafka-reassign-partitions.sh --bootstrap-server core-1-1:9092 --reassignment-json-file reassign.json --throttle <new-rate-in-bytes> --execute -
(Opcional) Verifique se os parâmetros de limitação foram aplicados. Consulte o broker 2:
kafka-configs.sh --bootstrap-server core-1-1:9092 -entity-type brokers --entity-name 2 --describeVerifique o tópico:
kafka-configs.sh --bootstrap-server core-1-1:9092 -entity-type topics --entity-name test-throttled --describe -
Valide a reatribuição e remova a limitação.
kafka-reassign-partitions.sh --bootstrap-server core-1-1:9092 --reassignment-json-file reassign.json --verifyApós a conclusão do job, execute o comando anterior novamente para remover os parâmetros de limitação.
Limitar o tráfego ao mover réplicas entre diretórios
Use kafka-reassign-partitions.sh com --replica-alter-log-dirs-throttle para limitar a E/S intra-broker durante a migração de diretórios de réplicas. A limitação reflete-se no parâmetro de nível de broker replica.alter.log.dirs.io.max.bytes.per.second.
Procedimento:
Faça login no nó mestre do cluster Kafka via SSH. Para mais detalhes, consulte Fazer login em um cluster.
-
Crie um tópico de teste.
kafka-topics.sh --bootstrap-server core-1-1:9092 --topic test-throttled --partitions 1 --replication-factor 3 --createVerifique os detalhes do tópico:
kafka-topics.sh --bootstrap-server core-1-1:9092 --topic test-throttled --describe -
Simule a gravação de dados.
kafka-producer-perf-test.sh --topic test-throttled --record-size 1000 --num-records 600000000 --print-metrics --throughput 10240 --producer-props acks=-1 linger.ms=0 bootstrap.servers=core-1-1:9092 -
Crie o plano de reatribuição com o diretório de destino. Crie um arquivo chamado
reassign.jsoncom o seguinte conteúdo:{"version":1,"partitions":[{"topic":"test-throttled","partition":0,"replicas":[2,0,3],"log_dirs":["any","/mnt/disk1/kafka/log","any"]}]} -
Execute a movimentação de réplicas com limitação.
kafka-reassign-partitions.sh --bootstrap-server core-1-1:9092 --reassignment-json-file reassign.json --replica-alter-log-dirs-throttle 30000000 --execute -
Confirme se o parâmetro de limitação foi aplicado no broker.
kafka-configs.sh --bootstrap-server core-1-1:9092 -entity-type brokers --describe --entity-name 0 -
Verifique se a movimentação foi concluída e remova a limitação.
NotaExecute
--verify
novamente após a conclusão do job para remover os parâmetros de limitação.
kafka-reassign-partitions.sh --bootstrap-server core-1-1:9092 --reassignment-json-file reassign.json --verify
Limitar o tráfego durante a recuperação de brokers
Após reiniciar, um broker ressincroniza os dados das réplicas a partir das réplicas líderes. Em cenários como migração de brokers ou reparo de discos, esse tráfego de sincronização pode ser significativo. Configure a limitação antes de parar o broker para impedir que o tráfego de recuperação afete o tráfego de negócios.
A limitação aplica-se apenas à replicação de manutenção, não às operações normais de busca de réplicas.
Depois que o broker se recuperar e suas réplicas retornarem à lista de réplicas sincronizadas (ISR), remova os parâmetros de limitação com
kafka-configs.sh. Se você pular esta etapa, a limitação continuará a ser aplicada a todo o tráfego de replicação.
Procedimento:
Faça login no nó mestre do cluster Kafka via SSH. Para mais detalhes, consulte Fazer login em um cluster.
-
Crie um tópico de teste.
kafka-topics.sh --bootstrap-server core-1-1:9092 --topic test-throttled --partitions 1 --replication-factor 3 --createVerifique os detalhes do tópico:
kafka-topics.sh --bootstrap-server core-1-1:9092 --topic test-throttled --describe -
Grave dados de teste.
kafka-producer-perf-test.sh --topic test-throttled --record-size 1000 --num-records 600000000 --print-metrics --throughput 10240 --producer-props acks=-1 linger.ms=0 bootstrap.servers=core-1-1:9092 -
Configure a limitação no tópico e em cada broker antes de parar o Broker 1. Aplique a limitação a todas as réplicas do tópico:
kafka-configs.sh --bootstrap-server core-1-1:9092 --entity-type topics --entity-name test-throttled --alter --add-config "leader.replication.throttled.replicas=*,follower.replication.throttled.replicas=*"Aplique as taxas de limitação a cada broker. Repita para todos os brokers do cluster:
kafka-configs.sh --bootstrap-server core-1-1:9092 --entity-type brokers --alter --add-config "leader.replication.throttled.rate=1024,follower.replication.throttled.rate=1024" --entity-name 0 kafka-configs.sh --bootstrap-server core-1-1:9092 --entity-type brokers --alter --add-config "leader.replication.throttled.rate=1024,follower.replication.throttled.rate=1024" --entity-name 1 kafka-configs.sh --bootstrap-server core-1-1:9092 --entity-type brokers --alter --add-config "leader.replication.throttled.rate=1024,follower.replication.throttled.rate=1024" --entity-name 2 ...... Pare o Broker 1 no console EMR.
-
Exclua os dados da réplica no Broker 1 para simular perda de dados.
rm -rf /mnt/disk2/kafka/log/test-throttled-0/ Inicie o Broker 1 no console EMR e confirme se os parâmetros de limitação estão ativos. Use os comandos em Consultar a configuração atual de limitação para verificar.
-
Após a recuperação das réplicas do Broker 1 e seu retorno à lista ISR, remova os parâmetros de limitação. Remova do tópico:
kafka-configs.sh --bootstrap-server core-1-1:9092 -entity-type topics --alter --delete-config 'leader.replication.throttled.replicas,follower.replication.throttled.replicas' --entity-name test-throttledRemova de cada broker:
kafka-configs.sh --bootstrap-server core-1-1:9092 -entity-type brokers --alter --delete-config 'leader.replication.throttled.replicas,follower.replication.throttled.replicas,leader.replication.throttled.rate,follower.replication.throttled.rate' --entity-name 0 ......