Format Atlas

Vergleichen

Avro oder Protocol Buffers

Apache Avro verknüpft Daten mit einem Schreibschema und löst es mit einem Leseschema auf. Protocol Buffers (Protobuf) generiert Code aus `.proto`-Definitionen und Feldnummern und codiert Nachrichten in einem nummerierten binären Wire-Format.

Welches Format sollten Sie wählen?

Avro eignet sich, wenn Schemata mit Daten übertragen und Schreib-/Leseschemata laufzeitübergreifend aufgelöst werden. Protobuf passt zu Systemen, die typisierten Code aus `.proto` erzeugen und Nachrichten per RPC oder zwischen Diensten austauschen.

Geeignet für Avro

Datensätze mit definiertem Schema austauschen

  • Ereignisse und Datenflüsse mit Schemaversionen

Geeignet für Protocol-Buffers-Schema

Struktur von Protocol-Buffers-Nachrichten festlegen · Datenverträge für mehrere Programmiersprachen teilen

  • Sprachspezifischen Code mit protoc erzeugen
  • Nachrichten für RPC und die Kommunikation zwischen Diensten definieren

Grundlegende Informationen

MerkmalAvroProtocol-Buffers-Schema
Dateiendung.avro.proto
MIME-Typapplication/avrotext/plain
Häufige VerwendungDatensätze mit definiertem Schema austauschenStruktur von Protocol-Buffers-Nachrichten festlegen · Datenverträge für mehrere Programmiersprachen teilen
ÖffnenPrüfen Sie Schema, Felder, Typen und Datensätze mit einem Avro-Werkzeug.Öffnen Sie die Datei in einem Texteditor oder einer Protocol-Buffers-fähigen IDE. Prüfen Sie Syntax und Imports, indem Sie sie mit der im Projekt verwendeten protoc-Version und Konfiguration kompilieren.
Exportieren oder konvertierenBei Umwandlung in JSON oder Parquet prüfen Sie Feldnamen, Typen, Nullwerte, logische Typen, Anzahl und Schema-Kompatibilität.Ordnen Sie beim Wechsel zu einem anderen Schemaformat Typen, Feldnummern, Standardwerte, Enum-Werte und Kompatibilitätsregeln zu. Erzeugen Sie anschließend den Code und testen Sie reale Daten. Eine Umbenennung in .json oder eine Binärdateiendung konvertiert die Datei nicht.

Nach Einsatzzweck wählen

Ereignisse und Datenflüsse mit Schemaversionen

Datensätze mit definiertem Schema austauschen

Avro

Sprachspezifischen Code mit protoc erzeugen

Struktur von Protocol-Buffers-Nachrichten festlegen · Datenverträge für mehrere Programmiersprachen teilen

Protocol-Buffers-Schema

Nachrichten für RPC und die Kommunikation zwischen Diensten definieren

Struktur von Protocol-Buffers-Nachrichten festlegen · Datenverträge für mehrere Programmiersprachen teilen

Protocol-Buffers-Schema

Wichtiger Punkt 1

Eine Avro-Objektcontainerdatei kann Schreibschema und Datenblöcke gemeinsam speichern. Protobuf-Wire-Daten enthalten keine Schemadefinition; `.proto`-Dateien oder Deskriptoren müssen separat verteilt und verwaltet werden.

Unterschiede im Detail

Wichtiger Punkt 2

Avro definiert die Auflösung zwischen Schreib- und Leseschema. Protobuf nutzt Feldnummern als Wire-IDs und erfordert Entwicklungsregeln wie das Verbot, gelöschte Nummern wiederzuverwenden.

Unterschiede im Detail

Unterschiede im Detail

Verwenden Sie Avro, wenn Dateien das Schreibschema tragen und Leser Schemata auflösen müssen. Verwenden Sie Protobuf, wenn generierte Nachrichtenklassen und stabile Feldnummernverträge passen. Beide benötigen Kompatibilitätsdisziplin; testen Sie alte und neue Leser und Schreiber in den benötigten Richtungen.

  • Avro-Containerdateien können Schema und Datenblöcke einbetten. Binäre Protobuf-Nachrichten sind ohne passendes Schema oder Deskriptor nicht selbstbeschreibend.
  • Avro löst Schemadifferenzen nach seinen Regeln auf. Protobuf-Kompatibilität hängt von Feldnummern, Wire-Typen, Presence-Semantik und sicherer Schemaentwicklung ab.
  • Die Wire-Formate sind nicht austauschbar. Ordnen Sie Unions/oneof, optional und Presence, Standardwerte, Enums, unbekannte Felder, logische Typen, Feldnummern und Typänderungen zu und testen Sie echte alte und neue Clients.

Häufige Fragen

Können Avro und Protobuf die Binärdateien des jeweils anderen direkt lesen?

Nein. Die Codierungen unterscheiden sich. Eine Konvertierung braucht eine explizite Feld- und Typzuordnung sowie Prüfungen von Standardwerten, Presence, unbekannten Feldern und Schemaentwicklung.

Mehr erfahren

Quellen und Spezifikationen