Skip to content
Latchkey

Protobuf vs Avro: どちらのバイナリschemaフォーマットか?

ProtobufはRPCに強いcodegenベースのバイナリフォーマット、Avroはschemaを同梱または参照するバイナリフォーマットで、データstreamingで一般的です。

Protobufは.protoの定義を型付きクラスにコンパイルし、フィールド番号ベースの互換性でRPC(gRPC)に優れます。Avroはschemaをデータとともに(またはregistry経由で)保存し、writer schemaとreader schemaを使って読み取ります。これは進化するデータpipelineに適し、KafkaやHadoopで多用されます。Protobufは型付きRPCを、Avroは動的でschemaを同梱するデータstreamingを重視します。

ProtobufAvro
主な用途RPC、サービスデータstreaming、ストレージ
schemaの提供方法生成コード保存 / registry
動的な読み取りあまり一般的でないネイティブ(reader/writer)
エコシステムgRPCKafka、Hadoop
最適な用途型付きサービス呼び出し進化するデータpipeline

ユースケースとschemaの進化

Protobufは、生成された強く型付けされたクライアントとフィールド番号の互換性ルールを備えたサービス間呼び出しに適します。Avroは、レコードがschemaを同梱または参照するビッグデータやstreamingに適し、registry経由で動的な処理と滑らかなschema進化を可能にします。Kafkaのpipelineは一般にschema registryを備えたAvroに標準化します。

CIでは

どちらも互換性チェックの恩恵を受けます。Protobufはbufのbreaking check経由、Avroはschema registryの互換性検証経由です。どちらもmanaged runner上で動作し、より高速なrunnerはcodegenと互換性チェックのステップを短縮します。

結論

型付きRPCとサービスインターフェース、特にgRPC: Protobuf。schemaを同梱し進化可能なシリアライゼーションを必要とするstreamingやデータレイクのレコード: Avro。分担はたいていドメインに従います - サービスにはProtobuf、KafkaとデータpipelineにはAvroです。

関連ガイド