【すきーまれじすとり】

スキーマレジストリ とは?

💡 「このデータの形はこれです」と全員が参照できる辞書
📌 このページのポイント
スキーマレジストリ:メッセージ型の一元管理 Schema Registry スキーマID: 1 → Avro定義 互換性チェック(後方/前方) Avro / Protobuf / JSON Schema Producer スキーマID埋め込みで メッセージをシリアライズ Kafka [ID=1][payload...] Consumer IDでスキーマ取得し デシリアライズ ①スキーマ登録 ③スキーマ取得 ②送信 ④受信 スキーマ変更時に互換性チェックが走り、破壊的変更を防ぐ
Schema RegistryがProducer/Consumer間のスキーマ不整合を防ぎ、安全な進化を支援する
ひよこ ひよこ

スキーマレジストリって何を管理してるの?

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

Kafkaでやり取りするメッセージの「型定義」を管理しているんだよ。たとえば「注文イベントにはorder_id(数値)とamount(小数)とcreated_at(日時)がある」という定義をスキーマと呼ぶんだ

ひよこ ひよこ

スキーマを管理しないとどうなるの?

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

送り手がフィールドの名前や型を変えたとき、受け取り側がデシリアライズできなくてエラーになるんだよ。チームが別々に開発してると「俺が変えた」「知らなかった」って事故が起きやすいんだ

ひよこ ひよこ

スキーマレジストリがあるとどう解決できるの?

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

Producerがメッセージを送るとき、スキーマIDをメッセージに埋め込んで送るんだよ。Consumerはそのスキーマ IDでRegistryに問い合わせて型定義を取得し、安全にデシリアライズできるんだ

ひよこ ひよこ

フィールドを追加したいときはどうするの?新しいスキーマを登録すればいい?

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

そうだよ。でも登録するとき互換性チェックが走るんだ。「既存のConsumerが新スキーマのメッセージを読めるか(後方互換)」「既存のProducerが送った古いメッセージを新Consumerが読めるか(前方互換)」を自動でチェックして、壊れそうなら登録を拒否してくれるんだよ

ひよこ ひよこ

すごい!フォーマットJSONだけなの?

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

いや、Avro・Protobuf・JSON Schemaの3種類が主流だよ。Avroはバイナリ圧縮が効いてKafkaでよく使われるね。ConfluentのSchema RegistryがOSSで定番だけど、AWS GlueやApicurio Registryも同じコンセプトで使えるよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「スキーマレジストリ」って出てきたら「Kafkaメッセージの型定義を管理する中央リポジトリ」と思えればだいたいOK!
📖 おまけ:英語の意味
「Schema Registry」 = スキーマの登録管理所
💬 schema(データ構造の定義)+ registry(登録・管理する場所)だよ。コンテナイメージのDockerレジストリと同じ発想で、データの「型」を登録・管理するんだ
← 用語集にもどる