top of page

Melhores práticas para usar o armazenamento em nuvem com o Apache Kafka para gerenciamento eficiente de dados a longo prazo.

O Apache Kafka é amplamente conhecido por sua capacidade de lidar com fluxos de dados em tempo real com alta taxa de transferência e baixa latência. No entanto, quando se trata de gerenciar o armazenamento de dados a longo prazo, o modelo de armazenamento nativo do Kafka apresenta limitações. Este artigo explora o desempenho do Apache Kafka no gerenciamento de dados a longo prazo, o papel dos buckets de armazenamento em nuvem como alternativa e as melhores práticas para combinar o Kafka com o armazenamento em nuvem para acesso e recuperação de dados eficientes.



Vista em nível dos olhos de um centro de dados de armazenamento em nuvem com fileiras de servidores e luzes piscando.


Como o Apache Kafka lida com o armazenamento de dados a longo prazo

O Apache Kafka armazena dados em tópicos como logs imutáveis nos discos locais dos brokers do Kafka. Esse design oferece suporte a leituras e gravações rápidas para casos de uso de streaming. No entanto, o armazenamento local do Kafka não é otimizado para a retenção de longo prazo de grandes volumes de dados devido a:


  • Limitações de armazenamento : os brokers do Kafka têm espaço em disco limitado, o que torna caro e complexo manter dados indefinidamente.

  • Políticas de retenção : O Kafka normalmente usa retenção baseada em tempo ou tamanho para excluir dados antigos automaticamente.

  • Complexidade de recuperação : Restaurar dados do Kafka após falhas de brokers pode ser um desafio para conjuntos de dados muito grandes.


O modelo de armazenamento do Kafka é excelente para retenção de dados a curto e médio prazo, geralmente variando de horas a semanas. Para períodos de retenção mais longos, as organizações costumam recorrer a soluções de armazenamento externo.


Utilizando buckets do Cloud Storage em vez de filas do Kafka

Os buckets de armazenamento em nuvem, como Amazon S3, Google Cloud Storage ou Azure Blob Storage, oferecem opções escaláveis, duráveis e econômicas para armazenamento de dados a longo prazo. Em vez de depender exclusivamente do armazenamento interno do Kafka, muitas arquiteturas transferem os dados mais antigos do Kafka para buckets na nuvem.


Blobs na nuvem e objetos armazenados em buckets

Eficácia na localização e recuperação de mensagens

Os buckets de armazenamento em nuvem são repositórios de objetos, não filas de mensagens. Isso significa:


  • Os dados são armazenados como arquivos ou objetos, em vez de mensagens individuais.

  • A recuperação de mensagens específicas requer estratégias de indexação ou particionamento.

  • A latência de acesso é maior em comparação com o armazenamento local do Kafka.


Para tornar a recuperação eficiente, os dados são frequentemente armazenados em formatos e estruturas que suportam consultas rápidas e eliminação de partições.


Formatos de dados e particionamento: Parquet e ORC

O Apache Kafka em si não utiliza nativamente os formatos Parquet ou ORC. Esses formatos de armazenamento colunar são populares em ecossistemas de big data devido à sua compressão e eficiência de consulta.


Ao exportar dados do Kafka para armazenamento em nuvem, muitas equipes convertem as mensagens em arquivos Parquet ou ORC. Essa abordagem oferece os seguintes benefícios:


  • A compressão eficiente reduz os custos de armazenamento.

  • O layout em colunas acelera as consultas, lendo apenas as colunas relevantes.

  • O particionamento por tempo, tópico ou outras chaves permite uma filtragem rápida.


Por exemplo, um padrão comum é agrupar as mensagens do Kafka em arquivos Parquet por hora, particionados por data e tópico. Essa estrutura permite que ferramentas de análise subsequentes localizem e examinem rapidamente os dados relevantes.


Melhores práticas para usar armazenamento em nuvem com Apache Kafka


1. Use o Kafka Connect com conectores de destino do Cloud Storage

O Kafka Connect fornece conectores prontos para uso que permitem exportar tópicos do Kafka para armazenamento em nuvem. Esses conectores lidam automaticamente com o processamento em lote, a conversão de formato de arquivo e o particionamento.


  • Escolha conectores que suportem saída Parquet ou ORC.

  • Configure esquemas de particionamento alinhados com seus padrões de consulta.

  • Defina intervalos de liberação adequados para equilibrar a latência e o tamanho do arquivo.


2. Implementar arquiteturas de armazenamento em camadas

O armazenamento em camadas separa os dados "quentes" (recentes e acessados com frequência) armazenados em brokers do Kafka dos dados "frios" (mais antigos e acessados com pouca frequência) armazenados em buckets na nuvem.


  • Armazene os dados mais recentes no Kafka para streaming e processamento rápidos.

  • Transfira dados antigos para armazenamento em nuvem para retenção de longo prazo com melhor custo-benefício.

  • Utilize ferramentas como o recurso de armazenamento em camadas do Apache Kafka (disponível em algumas distribuições) ou pipelines personalizados.


3. Elabore cuidadosamente as convenções de particionamento e nomenclatura.

O particionamento eficaz é fundamental para a recuperação eficiente de dados no armazenamento em nuvem.


  • Particione os dados por data/hora para permitir consultas baseadas em tempo.

  • Inclua o tópico ou tipo de evento nas chaves de partição para filtragem.

  • Utilize convenções consistentes de nomenclatura de arquivos para simplificar a indexação.


4. Use metadados e indexação para pesquisas rápidas

Como o armazenamento em nuvem não é uma fila de mensagens, a indexação de metadados é essencial.


  • Manter índices ou catálogos externos (por exemplo, AWS Glue, Apache Hive Metastore).

  • Utilize registros de esquemas para rastrear formatos e versões de dados.

  • Utilize mecanismos de consulta como o Presto ou o Apache Spark, que se integram com armazenamento em nuvem e metadados.


5. Monitorar e gerenciar o ciclo de vida dos dados

Defina políticas de ciclo de vida em buckets na nuvem para gerenciar o envelhecimento dos dados e os custos.


  • Arquivar ou excluir dados após os períodos de retenção.

  • Utilize classes de armazenamento (por exemplo, S3 Glacier) para dados acessados com pouca frequência.

  • Automatize a limpeza para evitar custos desnecessários de armazenamento.


Exemplo prático: Pipeline de análise de streaming

Uma empresa varejista transmite dados de transações por meio do Apache Kafka. Transações recentes são processadas em tempo real para detecção de fraudes. Transações mais antigas são exportadas a cada hora para o Amazon S3 no formato Parquet, particionadas por data e localização da loja.


Os analistas consultam os dados do S3 usando o Amazon Athena, que lê arquivos Parquet de forma eficiente. Essa configuração reduz as necessidades de armazenamento do broker Kafka e oferece armazenamento de longo prazo escalável e econômico, com alto desempenho de consulta.



bottom of page