Format Atlas

FORMAT COMPARISON

Avro vs Protocol Buffers schema

Apache Avroはデータとwriter schemaを結び付け、reader schemaとの解決を行う直列化システムです。Protocol Buffers(Protobuf)は`.proto`定義とフィールド番号からコードを生成し、番号を含むwire formatでメッセージを符号化します。

最終確認: 2026-09-27

AvroとProtocol Buffers schema、どちらを選ぶ?

スキーマをデータファイルとともに扱い、動的言語を含む複数環境でreader/writer schema解決を利用するならAvroを検討します。`.proto`から型付きコードを生成し、RPCやサービス境界でメッセージを交換する設計ではProtobufがよく合います。どちらも進化規則が必要で、互換性は一方向とは限らないため実際の旧新reader/writerで検証してください。

Avro向き

スキーマ付きレコードデータのシリアライズと交換

  • イベントやレコードをスキーマとともに扱うデータ連携

Protocol Buffers schema向き

Protocol Buffersメッセージの構造定義・複数言語間で共有するデータ契約

  • protocで各言語のコードを生成する
  • RPCやサービス間通信のメッセージを定義する

基本情報を比較

AvroとProtocol Buffers schemaの主な違いを確認できます。

項目AvroProtocol Buffers schema
拡張子.avro.proto
MIME Typeapplication/avrotext/plain
主な用途スキーマ付きレコードデータのシリアライズと交換Protocol Buffersメッセージの構造定義・複数言語間で共有するデータ契約
圧縮schema_serializationnone
開く方法Avro対応ツールでスキーマ、フィールド、型、レコード内容を確認します。テキストエディタやProtocol Buffers対応IDEで開きます。構文やimportを検証するには、プロジェクトが使うprotocと同じ版・設定でコンパイルします。
書き出し・変換JSONやParquetへ変換する場合は、フィールド名、型、null、論理型、スキーマ互換性を確認します。別スキーマ形式へ移す場合、型・フィールド番号・省略値・列挙値・互換性の意味を対応付けてからコード生成と実データのテストを行います。.protoをJSONやバイナリへ単純に拡張子変更しても変換されません。

用途別の選び方

作りたいものや使う場面から選べます。

イベントやレコードをスキーマとともに扱うデータ連携

スキーマ付きレコードデータのシリアライズと交換

Avro向き

protocで各言語のコードを生成する

Protocol Buffersメッセージの構造定義・複数言語間で共有するデータ契約

Protocol Buffers schema向き

RPCやサービス間通信のメッセージを定義する

Protocol Buffersメッセージの構造定義・複数言語間で共有するデータ契約

Protocol Buffers schema向き

確認ポイント 1

AvroのObject Container Fileはwriter schemaとデータブロックを同じファイルに格納できます。Protobufのwire data自体はschema定義を含まないので、`.proto`やdescriptorを別途配布・管理する設計が必要です。

使い分け

確認ポイント 2

Avroはreader schemaとwriter schemaの差を解決する機構を規定します。Protobufは各field numberをwire format上の識別子として使い、削除済み番号の再利用を避けるなどの進化規則に従います。

使い分け

選ぶ理由を詳しく

  • 両者のバイナリwire formatは互換ではありません。union/oneof、optional・presence、default、enum、unknown field、logical type、field numberと型変更を対応付け、古いデータやクライアントとの互換性をテストしてください。

詳しく見る

参考資料・仕様