Comparer
Avro ou Protocol Buffers
Apache Avro associe les données au schéma d'écriture et le résout avec le schéma de lecture. Protocol Buffers (Protobuf) génère du code à partir de définitions `.proto` et de numéros de champ, puis encode les messages dans un wire format binaire numéroté.
Quel format choisir ?
Envisagez Avro si le schéma accompagne les données et si la résolution des schémas écriture/lecture est utile entre environnements. Protobuf convient aux systèmes qui génèrent du code typé depuis `.proto` et échangent des messages par RPC ou entre services.
Adapté pour Avro
Échanger des enregistrements avec schéma
- Événements et flux suivant les versions de schéma
Adapté pour Schéma Protocol Buffers
Définir la structure des messages Protocol Buffers · Partager un contrat de données entre plusieurs langages
- Générer du code par langage avec protoc
- Définir les messages d’appels RPC et de communication entre services
Informations générales
| Élément | Avro | Schéma Protocol Buffers |
|---|---|---|
| Extension | .avro | .proto |
| Type MIME | application/avro | text/plain |
| Usages courants | Échanger des enregistrements avec schéma | Définir la structure des messages Protocol Buffers · Partager un contrat de données entre plusieurs langages |
| Comment ouvrir | Utilisez un outil Avro pour examiner schéma, champs, types et enregistrements. | Ouvrez-le dans un éditeur de texte ou un IDE compatible Protocol Buffers. Pour vérifier la syntaxe et les imports, compilez-le avec la version et les options de protoc du projet. |
| Exporter ou convertir | Vers JSON ou Parquet, vérifiez noms, types, valeurs nulles, types logiques, nombre de lignes et compatibilité. | Pour passer à un autre format de schéma, faites correspondre les types, numéros de champs, valeurs par défaut, énumérations et règles de compatibilité. Générez ensuite le code et testez des données réelles. Changer l’extension en .json ou en extension binaire ne convertit pas le fichier. |
Choisir selon l’usage
Événements et flux suivant les versions de schéma
Échanger des enregistrements avec schéma
AvroGénérer du code par langage avec protoc
Définir la structure des messages Protocol Buffers · Partager un contrat de données entre plusieurs langages
Schéma Protocol BuffersDéfinir les messages d’appels RPC et de communication entre services
Définir la structure des messages Protocol Buffers · Partager un contrat de données entre plusieurs langages
Schéma Protocol BuffersPoint clé 1
Un fichier conteneur Avro peut stocker le schéma d'écriture avec les blocs de données. Les données wire Protobuf n'incluent pas le schéma ; fichiers `.proto` ou descripteurs doivent être distribués et gérés à part.
En savoir plus sur les différencesPoint clé 2
Avro définit la résolution entre schémas d'écriture et de lecture. Protobuf utilise les numéros de champ comme identifiants wire et impose des règles telles que ne jamais réutiliser un numéro supprimé.
En savoir plus sur les différencesEn savoir plus sur les différences
Utilisez Avro si les fichiers doivent porter le schéma d'écriture et si les lecteurs doivent résoudre les schémas. Utilisez Protobuf si classes générées et numéros de champ stables conviennent. Les deux exigent une discipline de compatibilité ; testez les lecteurs et rédacteurs anciens et nouveaux dans les sens requis.
- Les fichiers conteneurs Avro peuvent inclure schéma et blocs de données. Les messages binaires Protobuf ne sont pas auto-descriptifs sans schéma ou descripteur correspondant.
- Avro résout les différences de schéma selon ses règles. La compatibilité Protobuf dépend des numéros de champ, wire types, de la présence et des pratiques d'évolution sûres.
- Les wire formats ne sont pas interchangeables. Mappez unions/oneof, optional et présence, valeurs par défaut, enums, champs inconnus, types logiques, numéros de champ et changements de type, puis testez de vrais anciens et nouveaux clients.
Questions fréquentes
Avro et Protobuf peuvent-ils lire directement les fichiers binaires de l'autre ?
Non. Les encodages diffèrent. La conversion exige un mappage explicite des champs et types, avec vérification des valeurs par défaut, présence, champs inconnus et évolution des schémas.