【アパッチ アブロ】

Apache Avro とは?

💡 データの型情報をJSONで書いて、中身はバイナリで圧縮する賢い荷造り係
📌 このページのポイント
Apache Avro — スキーマ定義とバイナリシリアライゼーション スキーマ(JSON) { "type": "record", "name": "User", "fields": [ {"name":"id"}, {"name":"age"} ] } エンコード (バイナリ化) バイナリデータ 0x03 08 6A 6F 68 6E... JSON形式(テキスト) 100 bytes Avroバイナリ 約30 bytes Schema Evolution(スキーマ進化) フィールド追加・削除・デフォルト値変更に対応 → 古いデータも新スキーマで読み込める
Apache Avro:JSONスキーマ定義とコンパクトなバイナリ形式のシリアライゼーション
ひよこ ひよこ

Apache AvroってProtobufと似たようなもの?

ペンギン先生 ペンギン先生

どちらもバイナリシリアライゼーションフォーマットだよ。大きな違いは、Avroはスキーマをデータと一緒に持ち歩けることと、スキーマJSONで書ける読みやすさにあるんだ。

ひよこ ひよこ

シリアライゼーションって何なの?

ペンギン先生 ペンギン先生

データをバイト列に変換することだよ。JSONはテキストで読みやすいけどサイズが大きい。Avroはバイナリだからサイズが小さくて送受信が速いんだ。

ひよこ ひよこ

schema evolutionって言葉が難しそう…

ペンギン先生 ペンギン先生

データの構造(スキーマ)が時間とともに変化しても、古いデータと新しいデータを共存できる仕組みだよ。たとえば新しいフィールドを追加しても、デフォルト値を設定しておけば古いデータも読めるんだ。

ひよこ ひよこ

Kafkaとよく使われるって聞いたけど、どう組み合わせるの?

ペンギン先生 ペンギン先生

KafkaのメッセージをAvroフォーマットで送受信して、スキーマをSchema Registryで一元管理するパターンが一般的だよ。メッセージのバージョン管理が楽になるんだ。

ひよこ ひよこ

他のフォーマットと比べてどんなときにAvroを選ぶといいの?

ペンギン先生 ペンギン先生

Hadoopやビッグデータ環境との相性が良くて、schema evolutionが必要なときに向いてるよ。ProtobufはGRPCと組み合わせてAPI通信に使われることが多いのに対して、AvroはKafkaやHiveなどのデータ基盤でよく見かけるね。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
Apache Avro」って出てきたら「JSONスキーマを書いてバイナリで高速・コンパクトにデータを扱うシリアライゼーションフォーマット」と思えればだいたいOK!
📖 おまけ:英語の意味
「Apache Avro」 = アパッチ アブロ(航空機ブランド名から)
💬 Hadoopの生みの親Doug Cuttingが命名したと言われ、イギリスの航空機メーカー「Avro」から取ったとされているんだよ。軽量・高速なイメージが由来のようだね
← 用語集にもどる