Skip to content
Latchkey

Protobuf vs Avro: qual formato binário com schema?

Protobuf é um formato binário baseado em codegen, forte para RPC; Avro é um formato binário que carrega ou referencia seu schema, comum em streaming de dados.

Protobuf compila definições .proto em classes tipadas e se destaca em RPC (gRPC) com compatibilidade baseada em números de campo. Avro armazena o schema junto aos dados (ou via um registry) e lê usando um schema de escrita e outro de leitura, o que combina com pipelines de dados em evolução e é muito usado com Kafka e Hadoop. Protobuf favorece RPC tipado; Avro favorece streaming de dados dinâmico e que carrega schema.

ProtobufAvro
Uso principalRPC, serviçosStreaming de dados, armazenamento
Entrega do schemaCódigo geradoArmazenado / registry
Leitura dinâmicaMenos comumNativa (reader/writer)
EcossistemagRPCKafka, Hadoop
Melhor paraChamadas de serviço tipadasPipelines de dados em evolução

Caso de uso e evolução de schema

Protobuf combina com chamadas serviço-a-serviço com clientes gerados e fortemente tipados e regras de compatibilidade por número de campo. Avro combina com big-data e streaming onde os registros carregam ou referenciam schemas, permitindo processamento dinâmico e evolução suave de schema via um registry. Pipelines de Kafka comumente padronizam em Avro com um schema registry.

No CI

Ambos se beneficiam de checagens de compatibilidade: Protobuf via buf breaking checks, Avro via validação de compatibilidade do schema registry. Ambos rodam em managed runners, onde runners mais rápidos encurtam os passos de codegen e checagem de compatibilidade.

O veredito

RPC tipado e interfaces de serviço, especialmente com gRPC: Protobuf. Registros de streaming e de data lake que precisam de serialização que carrega schema e é evoluível: Avro. A divisão costuma seguir o domínio - Protobuf para serviços, Avro para Kafka e pipelines de dados.

Guias relacionados