Format Atlas

Comparar

Avro o Protocol Buffers

Apache Avro asocia los datos con un esquema de escritura y lo resuelve frente al esquema de lectura. Protocol Buffers (Protobuf) genera código a partir de definiciones `.proto` y números de campo, y codifica mensajes en un formato binario numerado.

¿Qué formato deberías elegir?

Considera Avro cuando el esquema acompaña a los datos y resulta útil resolver esquemas de escritura y lectura entre entornos. Protobuf encaja si se genera código tipado desde `.proto` y se intercambian mensajes entre RPC o servicios.

Adecuado para Avro

Intercambiar registros con esquema definido

  • Eventos y flujos con versiones de esquema

Adecuado para Esquema de Protocol Buffers

Definir la estructura de mensajes Protocol Buffers · Compartir contratos de datos entre lenguajes

  • Generar código para distintos lenguajes con protoc
  • Definir mensajes para RPC y comunicación entre servicios

Información básica

CampoAvroEsquema de Protocol Buffers
Extensión.avro.proto
Tipo MIMEapplication/avrotext/plain
Usos habitualesIntercambiar registros con esquema definidoDefinir la estructura de mensajes Protocol Buffers · Compartir contratos de datos entre lenguajes
Cómo abrirUse una herramienta Avro para examinar esquema, campos, tipos y registros.Ábrelo en un editor de texto o un IDE compatible con Protocol Buffers. Para validar la sintaxis y las importaciones, compílalo con la versión y configuración de protoc que use el proyecto.
Exportar o convertirAl convertir a JSON o Parquet, compruebe nombres, tipos, nulos, tipos lógicos, número de registros y compatibilidad.Al pasar a otro formato de esquema, asigna los tipos, números de campo, valores predeterminados, enumeraciones y reglas de compatibilidad. Después genera el código y prueba datos reales. Cambiar la extensión a .json o a una de formato binario no lo convierte.

Elegir según el uso

Eventos y flujos con versiones de esquema

Intercambiar registros con esquema definido

Avro

Generar código para distintos lenguajes con protoc

Definir la estructura de mensajes Protocol Buffers · Compartir contratos de datos entre lenguajes

Esquema de Protocol Buffers

Definir mensajes para RPC y comunicación entre servicios

Definir la estructura de mensajes Protocol Buffers · Compartir contratos de datos entre lenguajes

Esquema de Protocol Buffers

Punto clave 1

Un archivo contenedor Avro puede almacenar el esquema de escritura junto con bloques de datos. El wire data de Protobuf no incluye el esquema, por lo que archivos `.proto` o descriptores se distribuyen y gestionan aparte.

Más sobre las diferencias

Punto clave 2

Avro define resolución entre esquemas de escritura y lectura. Protobuf usa números de campo como identificadores wire y exige reglas de evolución, como no reutilizar números eliminados.

Más sobre las diferencias

Más sobre las diferencias

Usa Avro si los archivos deben llevar el esquema de escritura y los lectores necesitan resolverlo. Usa Protobuf si convienen clases generadas y contratos estables de números de campo. Ambos requieren disciplina de compatibilidad; prueba lectores y escritores antiguos y nuevos en las direcciones necesarias.

  • Los contenedores Avro pueden incluir esquema y bloques de datos. Los mensajes binarios Protobuf no se describen solos sin el esquema o descriptor correspondiente.
  • Avro resuelve diferencias de esquema según sus reglas. La compatibilidad Protobuf depende de números de campo, wire types, presencia y prácticas seguras de evolución.
  • Los formatos binarios no son intercambiables. Mapea unions/oneof, optional y presencia, valores predeterminados, enums, campos desconocidos, tipos lógicos, números de campo y cambios de tipo; prueba clientes reales antiguos y nuevos.

Preguntas frecuentes

¿Avro y Protobuf pueden leer directamente los archivos binarios del otro?

No. Sus codificaciones difieren. La conversión exige mapear campos y tipos explícitamente y comprobar valores predeterminados, presencia, campos desconocidos y evolución del esquema.

Más información

Referencias y especificaciones