Format Atlas

Comparar

Avro ou Protocol Buffers

Apache Avro associa dados ao esquema de escrita e o resolve com o esquema de leitura. Protocol Buffers (Protobuf) gera código a partir de definições `.proto` e números de campo e codifica mensagens em um wire format binário numerado.

Qual formato você deve escolher?

Considere Avro quando o esquema acompanha os dados e a resolução entre esquemas de escrita e leitura é útil em diferentes runtimes. Protobuf combina com sistemas que geram código tipado de `.proto` e trocam mensagens por RPC ou fronteiras de serviço.

Indicado para Avro

Trocar registros com esquema definido

  • Eventos e pipelines com versões de esquema

Indicado para Esquema do Protocol Buffers

Definir a estrutura de mensagens do Protocol Buffers · Compartilhar contratos de dados entre linguagens

  • Gerar código para diferentes linguagens com protoc
  • Definir mensagens para RPC e comunicação entre serviços

Informações básicas

CampoAvroEsquema do Protocol Buffers
Extensão.avro.proto
Tipo MIMEapplication/avrotext/plain
Usos comunsTrocar registros com esquema definidoDefinir a estrutura de mensagens do Protocol Buffers · Compartilhar contratos de dados entre linguagens
Como abrirUse ferramenta Avro para conferir esquema, campos, tipos e registros.Abra em um editor de texto ou IDE com suporte a Protocol Buffers. Para validar sintaxe e imports, compile com a versão do protoc e as configurações usadas pelo projeto.
Exportar ou converterAo converter para JSON ou Parquet, confira nomes, tipos, nulos, tipos lógicos, quantidade de registros e compatibilidade.Ao migrar para outro formato de esquema, mapeie tipos, números de campo, valores padrão, enums e regras de compatibilidade. Depois gere o código e teste dados reais. Trocar a extensão para .json ou para uma extensão binária não converte o arquivo.

Escolha por finalidade

Eventos e pipelines com versões de esquema

Trocar registros com esquema definido

Avro

Gerar código para diferentes linguagens com protoc

Definir a estrutura de mensagens do Protocol Buffers · Compartilhar contratos de dados entre linguagens

Esquema do Protocol Buffers

Definir mensagens para RPC e comunicação entre serviços

Definir a estrutura de mensagens do Protocol Buffers · Compartilhar contratos de dados entre linguagens

Esquema do Protocol Buffers

Ponto principal 1

Um arquivo contêiner Avro pode armazenar o esquema de escrita junto dos blocos de dados. O wire data do Protobuf não inclui a definição do esquema, então arquivos `.proto` ou descritores precisam ser distribuídos e gerenciados à parte.

Mais sobre as diferenças

Ponto principal 2

Avro especifica a resolução entre esquemas de escrita e leitura. Protobuf usa números de campo como identificadores no wire format e depende de regras de evolução, como nunca reutilizar números excluídos.

Mais sobre as diferenças

Mais sobre as diferenças

Use Avro quando arquivos devem carregar o esquema de escrita e leitores precisam resolver esquemas. Use Protobuf quando classes geradas e contratos estáveis de números de campo forem adequados. Ambos exigem disciplina de compatibilidade; teste leitores e escritores antigos e novos nas direções necessárias.

  • Arquivos contêiner Avro podem incorporar esquema e blocos de dados. Mensagens binárias Protobuf não são autodescritivas sem esquema ou descritor correspondente.
  • Avro resolve diferenças de esquema conforme suas regras. A compatibilidade Protobuf depende de números de campo, wire types, presença e práticas seguras de evolução.
  • Os wire formats não são intercambiáveis. Mapeie unions/oneof, optional e presença, padrões, enums, campos desconhecidos, tipos lógicos, números de campo e mudanças de tipo; teste clientes reais antigos e novos.

Perguntas frequentes

Avro e Protobuf podem ler diretamente os arquivos binários um do outro?

Não. As codificações são diferentes. A conversão exige mapeamento explícito de campos e tipos e verificações de padrões, presença, campos desconhecidos e evolução de esquema.

Saiba mais

Referências e especificações