【すきーまれじすとり】

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

公開:
💡 「このデータの形はこれです」と全員が参照できる辞書
📌 このページのポイント
スキーマレジストリ:メッセージ型の一元管理 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レジストリと同じ発想で、データの「型」を登録・管理するんだ
← 用語集にもどる