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.
| Protobuf | Avro | |
|---|---|---|
| Uso principal | RPC, serviços | Streaming de dados, armazenamento |
| Entrega do schema | Código gerado | Armazenado / registry |
| Leitura dinâmica | Menos comum | Nativa (reader/writer) |
| Ecossistema | gRPC | Kafka, Hadoop |
| Melhor para | Chamadas de serviço tipadas | Pipelines 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.