Bandingkan
Avro atau Protocol Buffers
Apache Avro mengaitkan data dengan skema penulis dan menyelesaikannya terhadap skema pembaca. Protocol Buffers (Protobuf) menghasilkan kode dari definisi `.proto` dan nomor field, lalu mengodekan pesan dalam wire format biner bernomor.
Format mana yang sebaiknya dipilih?
Pertimbangkan Avro saat skema ikut bersama data dan resolusi skema penulis/pembaca berguna lintas runtime. Protobuf cocok untuk sistem yang membuat kode bertipe dari `.proto` dan bertukar pesan melalui RPC atau batas layanan.
Cocok untuk Avro
Menukar catatan dengan skema terdefinisi
- Peristiwa dan alur data dengan versi skema
Cocok untuk Skema Protocol Buffers
Menentukan struktur pesan Protocol Buffers · Berbagi kontrak data lintas bahasa pemrograman
- Menghasilkan kode untuk berbagai bahasa dengan protoc
- Menentukan pesan untuk RPC dan komunikasi antarlayanan
Informasi dasar
| Item | Avro | Skema Protocol Buffers |
|---|---|---|
| Ekstensi | .avro | .proto |
| Tipe MIME | application/avro | text/plain |
| Penggunaan umum | Menukar catatan dengan skema terdefinisi | Menentukan struktur pesan Protocol Buffers · Berbagi kontrak data lintas bahasa pemrograman |
| Cara membuka | Gunakan alat Avro untuk memeriksa skema, bidang, tipe, dan catatan. | Buka dengan editor teks atau IDE yang mendukung Protocol Buffers. Untuk memeriksa sintaks dan import, kompilasi memakai versi dan konfigurasi protoc yang digunakan proyek. |
| Ekspor atau konversi | Ke JSON atau Parquet, periksa nama bidang, tipe, null, tipe logis, jumlah catatan, dan kompatibilitas skema. | Saat berpindah ke format skema lain, petakan tipe, nomor field, nilai default, enum, dan aturan kompatibilitas. Setelah itu, hasilkan kode dan uji dengan data nyata. Mengganti ekstensi menjadi .json atau ekstensi biner tidak mengonversi file. |
Pilih menurut penggunaan
Peristiwa dan alur data dengan versi skema
Menukar catatan dengan skema terdefinisi
AvroMenghasilkan kode untuk berbagai bahasa dengan protoc
Menentukan struktur pesan Protocol Buffers · Berbagi kontrak data lintas bahasa pemrograman
Skema Protocol BuffersMenentukan pesan untuk RPC dan komunikasi antarlayanan
Menentukan struktur pesan Protocol Buffers · Berbagi kontrak data lintas bahasa pemrograman
Skema Protocol BuffersPoin utama 1
Berkas Avro Object Container dapat menyimpan skema penulis bersama blok data. Wire data Protobuf tidak menyertakan definisi skema, sehingga file `.proto` atau descriptor perlu didistribusikan dan dikelola terpisah.
Perbedaan lebih lanjutPoin utama 2
Avro menentukan resolusi antara skema penulis dan pembaca. Protobuf memakai nomor field sebagai pengenal wire dan mengandalkan aturan evolusi seperti tidak memakai ulang nomor yang dihapus.
Perbedaan lebih lanjutPerbedaan lebih lanjut
Gunakan Avro bila berkas perlu membawa skema penulis dan pembaca perlu menyelesaikan skema. Gunakan Protobuf bila kelas pesan hasil generasi dan kontrak nomor field stabil sesuai. Keduanya memerlukan disiplin kompatibilitas; uji pembaca dan penulis lama serta baru ke arah yang dibutuhkan.
- Berkas kontainer Avro dapat menyematkan skema dan blok data. Pesan biner Protobuf tidak mendeskripsikan diri tanpa skema atau descriptor yang cocok.
- Avro menyelesaikan perbedaan skema menurut aturannya. Kompatibilitas Protobuf bergantung pada nomor field, wire type, semantik presence, dan praktik evolusi yang aman.
- Wire format keduanya tidak dapat saling dipertukarkan. Petakan union/oneof, optional dan presence, nilai bawaan, enum, field tak dikenal, tipe logis, nomor field, dan perubahan tipe; lalu uji klien lama dan baru yang nyata.
Pertanyaan umum
Dapatkah Avro dan Protobuf langsung membaca berkas biner satu sama lain?
Tidak. Encoding berbeda. Konversi memerlukan pemetaan field dan tipe secara eksplisit serta pemeriksaan nilai bawaan, presence, field tak dikenal, dan evolusi skema.