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
| Merkmal | Avro | Protocol-Buffers-Schema |
|---|---|---|
| Dateiendung | .avro | .proto |
| MIME-Typ | application/avro | text/plain |
| Häufige Verwendung | Datensätze mit definiertem Schema austauschen | Struktur von Protocol-Buffers-Nachrichten festlegen · Datenverträge für mehrere Programmiersprachen teilen |
| Öffnen | Prü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 konvertieren | Bei 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
AvroSprachspezifischen Code mit protoc erzeugen
Struktur von Protocol-Buffers-Nachrichten festlegen · Datenverträge für mehrere Programmiersprachen teilen
Protocol-Buffers-SchemaNachrichten für RPC und die Kommunikation zwischen Diensten definieren
Struktur von Protocol-Buffers-Nachrichten festlegen · Datenverträge für mehrere Programmiersprachen teilen
Protocol-Buffers-SchemaWichtiger 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 DetailWichtiger 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 DetailUnterschiede 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.