Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Atualizado em 2024-09-09 GMT+08:00

Manuseio da sobrecarga de serviço

Introdução

Alto uso da CPU e discos cheios indicam serviços do Kafka sobrecarregados.

  • O alto uso da CPU leva a baixo desempenho do sistema e alto risco de danos ao hardware.
  • Se um disco estiver cheio, o conteúdo do log do Kafka armazenado nele ficará off-line. Em seguida, as réplicas de partição do disco não podem ser lidas ou gravadas, reduzindo a disponibilidade de partição e a tolerância a falhas. A partição líder muda para outro agente, adicionando a carga ao agente.

Causas do alto uso da CPU

  • Há muitos threads de operação de dados: num.io.threads, num.network.threads e num.replica.fetchers.
  • Partições impróprias. Um agente oferece todos os serviços de produção e consumo.

Causas do disco cheio

  • O espaço em disco atual não atende mais às necessidades do volume de dados de serviço que aumenta rapidamente.
  • Uso desequilibrado do disco do agente. As mensagens produzidas estão todas em uma partição, ocupando o disco da partição.
  • O tempo de vida (TTL) definido para um tópico é muito longo. Dados anteriores ocupam muito espaço em disco.

Solução

Manuseio de alto uso da CPU:

  • Otimize a configuração dos parâmetros para threads num.io.threads, num.network.threads e num.replica.fetchers.
    • Defina o número de num.io.threads e o número de threads num.network.threads como múltiplos da quantidade de discos. Não exceda o número de núcleos da CPU.
    • Defina o número de threads num.replica.fetchers como menor ou igual a 5.
  • Defina as partições de tópicos corretamente. Defina o número de partições para múltiplos do número de agentes.
  • Anexe um sufixo aleatório a cada chave de mensagem para que as mensagens possam ser distribuídas uniformemente em partições.

    Em cenários reais, anexar um sufixo aleatório a cada chave de mensagem compromete a sequência global de mensagens. Decida se um sufixo é exigido pelo seu serviço.

Manuseio de disco cheio:

  • Aumente o espaço em disco.
  • Migre partições do disco completo para outros discos no agente.
  • Defina um TTL adequado para tópicos para reduzir a capacidade dos dados históricos.
  • Se os recursos da CPU forem suficientes, compacte os dados com algoritmos de compactação.

    Os algoritmos de compactação comuns incluem ZIP, gzip, Sappy e LZ4. Você precisa considerar a taxa e a duração da compactação de dados ao selecionar os algoritmos de compactação. Geralmente, um algoritmo com uma taxa de compactação mais alta consome mais tempo. Para sistemas com requisitos de alto desempenho, selecione algoritmos com compactação rápida, como o LZ4. Para sistemas com requisitos de alta taxa de compactação, selecione algoritmos com alta taxa de compactação, como gzip.

    Configure o parâmetro compression.type nos produtores para especificar um algoritmo de compactação.

    Properties props = new Properties();
    props.put("bootstrap.servers", "localhost:9092");
    props.put("acks", "all");
    props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
    props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
    // Enable GZIP.
    props.put("compression.type", "gzip");
     
    Producer<String, String> producer = new KafkaProducer<>(props);