Sobes.tech
Middle

Por que o Apache Kafka possui alto desempenho?

sobes.tech IA

Resposta da IA

O Kafka alcança um alto desempenho graças a vários mecanismos-chave:

  1. Gravação sequencial no disco: Os brokers do Kafka escrevem dados nos logs (ficheiros de segmentos) de forma sequencial. A gravação sequencial é muito mais rápida do que a aleatória, especialmente em discos tradicionais (HDD).

  2. Ausência de buffer intermédio: O Kafka não bufferiza mensagens na memória antes de as gravar no disco. As mensagens são gravadas imediatamente após serem recebidas, o que reduz a latência e o consumo de memória.

  3. Uso do cache de páginas do sistema operativo: Os brokers utilizam ativamente o cache de páginas do sistema operativo (Page Cache) para ler dados. Isto evita leituras repetidas do disco e acelera significativamente a entrega de mensagens aos assinantes. Os dados gravados no disco pelo broker são automaticamente colocados no cache de páginas.

  4. Cópia zero (Zero-copy): Ao enviar dados aos assinantes, o Kafka utiliza a técnica de "cópia zero" (implementada através do sendfile no Linux). Isto evita a cópia intermédia de dados entre os buffers do núcleo e o espaço de utilizador, transferindo os dados diretamente do cache de páginas do broker para o socket de rede do consumidor.

    // Exemplo de pseudocódigo que ilustra o conceito de sendfile
    // (Não é código real do Kafka, apenas uma demonstração da ideia)
    FileChannel fileChannel = ...; // Canal de leitura do ficheiro (log do Kafka)
    SocketChannel socketChannel = ...; // Canal para enviar dados pela rede
    
    fileChannel.transferTo(0, fileChannel.size(), socketChannel); // Operação de cópia zero
    
  5. Processamento por lotes (Batching): O Kafka permite enviar e receber mensagens em lotes. Isto reduz os custos de requisições de rede e operações de disco. Os produtores podem agrupar várias mensagens antes de as enviar, e os consumidores podem ler várias mensagens numa única requisição.

  6. Particionamento: Os tópicos são divididos em partições. Cada partição é processada de forma independente, o que permite distribuir a carga entre vários brokers e processar a leitura/escrita em paralelo. Isto garante escalabilidade horizontal.

  7. Formato simples de mensagens: As mensagens têm uma estrutura relativamente simples, o que minimiza os custos de serialização e deserialização.

No conjunto, estes mecanismos permitem ao Kafka processar volumes muito grandes de mensagens com baixa latência.