Azure Event Hubs のスキーマ レジストリ
スキーマ レジストリは、データの一貫性を維持し、スキーマの展開を簡素化し、相互運用性を強化し、開発作業を削減するために、疎結合ワークフローとイベント ストリーミング ワークフローで重要です。 スキーマ用の一元化されたリポジトリを持つ大規模な分散組織では、運用上のオーバーヘッドがほとんどなく、信頼性の高いデータ処理とガバナンスが保証されます。
Azure Event Hubs のスキーマ レジストリは、スキーマ駆動型のイベント ストリーミング シナリオで以下の複数の役割を果たします。
- 複数のスキーマを登録、管理、および展開できるリポジトリを提供。
- 複数の互換性規則を使用してスキーマの展開を管理。
- スキーマ化されたすべてのデータに対してデータの入力規則を実行。
- プロデューサー用とコンシューマー用のクライアント側のライブラリ (シリアライザーとデシリアライザー) を提供。
- すべてのペイロードのスキーマ定義ではなくスキーマ ID を渡すことで、ネットワーク スループットの効率を向上。
Note
スキーマ レジストリは、Standard、Premium、Dedicated レベルでサポートされています。
スキーマ レジストリのコンポーネント
スキーマ レジストリは Event Hubs 名前空間のコンテキストに存在しますが、すべての Azure メッセージング サービスまたはその他のメッセージまたはイベント ブローカーで使用できます。 これは、スキーマの論理的なグループとして機能し、他のスキーマ グループから独立して管理できる複数のスキーマ グループで構成されます。
スキーマ
疎結合システムでは、主にデータを介して相互に通信する複数のアプリケーションがあります。 スキーマは、これらのプロデューサー アプリケーションとコンシューマー アプリケーションの間のコントラクトが明確に定義されるように、データの構造を宣言的に定義する方法として機能し、大規模な信頼性の高い処理を保証します。
スキーマ定義には次のものが含まれます。
- フィールド - 個々のデータ要素の名前 (つまり、名/姓、書籍のタイトル、住所)。
- データ型 - 各フィールドに格納できるデータの種類 (文字列、日付/時刻、配列など)。
- 構造体 - 異なるフィールドの編成 (つまり、入れ子になった構造体または配列)。
スキーマでは、プロデューサーとコンシューマーの間のコントラクトが定義されています。 Event Hubs スキーマ レジストリで定義されるスキーマは、イベント データ外のコントラクトを管理するのに役立つため、ペイロードのオーバーヘッドを除去できます。
スキーマの形式
スキーマ形式は、スキーマが構造化および定義される方法を決定するために使用されます。各形式は、イベント ストリーミングに使用されるイベントの構造を定義するための特定のガイドラインと構文を示しています。
Avro スキーマ
Avro は一般的なデータ シリアル化システムであり、コンパクトなバイナリ形式を使用し、スキーマの展開機能を提供します。
Event Hubs スキーマ レジストリで Avro スキーマ形式を使用する方法の詳細については、以下を参照してください。
JSON スキーマ
JSON スキーマは、イベントの構造とデータ型を定義する標準化された方法です。 JSON スキーマを使用すると、イベント ストリーミングで JSON データ形式を確実かつ信頼性の高い方法で使用できます。
Event Hubs スキーマ レジストリで JSON スキーマ形式を使用する方法の詳細については、以下を参照してください。
Protobuf
プロトコル バッファーは、構造化データをシリアル化するための、言語に依存しない、プラットフォームに依存しない拡張可能なメカニズムです。 データ構造を効率的に定義し、コンパクトなバイナリ形式にシリアル化するために使用されます。
スキーマ グループ
スキーマ グループは、ビジネス条件に基づく類似したスキーマの論理グループです。 スキーマ グループは以下を保持しています。
- 複数のスキーマ定義
- 特定のスキーマの複数のバージョン
- グループ内のすべてのスキーマのスキーマの種類と互換性に関するメタデータ
スキーマ グループは、個別の認可モデルを使用した、特定のアプリケーションまたは組織単位に合わせたスキーマ レジストリのサブセットと考えることができます。 この追加のセキュリティ境界により、共有サービス モデル、メタデータ、および企業秘密が漏洩しないようにします。 また、同じ名前空間を共有する他のアプリケーションから独立して、アプリケーション所有者がスキーマを管理することもできます。
スキーマの展開
スキーマは、プロデューサーとコンシューマーのビジネス要件に合わせて進化する必要があります。 Azure スキーマ レジストリでは、スキーマ グループ レベルでの互換性モードの導入によってスキーマの進化がサポートされています。 スキーマ グループを作成するときに、そのスキーマ グループに含めるスキーマの互換性モードを指定できます。 スキーマを更新する場合、変更は、割り当てられた互換性モードに準拠している必要があります。その後、スキーマの新しいバージョンのみが作成されます。
Note
スキーマの展開は、Avro スキーマ形式のみでサポートされています。
Azure Event Hubs 用の Azure スキーマ レジストリは、次の互換性モードに対応しています。
旧バージョンとの互換性
旧バージョンとの互換性モードでは、コンシューマー コードでスキーマの新しいバージョンを使用できますが、古いバージョンのスキーマでメッセージを処理できます。 スキーマ グループで旧バージョンとの互換性モードを使用すると、スキーマに対して次の変更を行うことができます。
- フィールドを削除します。
- 省略可能なフィールドを追加します。
上位互換性
上位互換性により、コンシューマー コードで古いバージョンのスキーマを使用できるようになりますが、新しいスキーマを使用してメッセージを読み取ることができます。 上位互換性モードでは、スキーマに対して次の変更を行うことができます。
- フィールドを追加する
- 省略可能なフィールドの削除
互換性なし
None
互換性モードを使うと、スキーマを更新してもスキーマ レジストリによる互換性チェックは行われません。
クライアント SDK
次のライブラリのいずれかを使って、Avro シリアライザーを組み込むことができます。これを使うと、スキーマ レジストリのスキーマ識別子と Avro エンコード データを含むペイロードをシリアル化および逆シリアル化できます。
- .NET - Microsoft.Azure.Data.SchemaRegistry.ApacheAvro
- Java - azure-data-schemaregistry-avro
- Python - azure-schemaregistry-avroserializer
- JavaScript - @azure/schema-registry-avro
- Apache Kafka - Azure Schema Registry によって提供される Kafka 統合 Apache Avro シリアライザーと逆シリアライザーを実行します。 Azure Schema Registry 用の Java クライアントの Apache Kafka クライアント シリアライザーは、任意の Apache Kafka シナリオで、Apache Kafka® ベースのデプロイまたはクラウド サービスと共に使用できます。
- Azure CLI - CLI を使用してスキーマ グループにスキーマを追加する例については、CLI を使用したスキーマ グループへのスキーマの追加に関する記事を参照してください。
- PowerShell - PowerShell を使用してスキーマ グループにスキーマを追加する例については、PowerShell を使用したスキーマ グループへのスキーマの追加に関する記事を参照してください。
制限
Event Hubs の制限 (例: 名前空間内のスキーマ グループの数) については、Event Hubs のクォータと制限に関するページを参照してください。
Azure ロールベースのアクセス制御
スキーマ レジストリにプログラムでアクセスするには、次の手順に従います。
- Microsoft Entra ID でアプリケーションを登録する
- アプリケーションのセキュリティ プリンシパルを、名前空間レベルで、次の Azure RBAC (ロールベースのアクセス制御) ロールのいずれかに追加します。
役割 | 説明 |
---|---|
所有者 | Schema Registry グループおよびスキーマの読み取り、書き込み、および削除を行います。 |
共同作成者 | Schema Registry グループおよびスキーマの読み取り、書き込み、および削除を行います。 |
スキーマ レジストリ閲覧者 | Schema Registry グループおよびスキーマの読み取りと一覧表示を行います。 |
スキーマ レジストリ共同作成者 | Schema Registry グループおよびスキーマの読み取り、書き込み、および削除を行います。 |
Azure portal を使用してアプリケーションを登録する方法については、Microsoft Entra ID にアプリを登録する方法に関するページを参照してください。 コードで使用するクライアント ID (アプリケーション ID)、テナント ID、およびシークレットをメモしておきます。
次の手順
- Azure portal を使用してスキーマ レジストリを作成する方法については、Azure portal を使用して Event Hubs スキーマ レジストリを作成する方法に関するページを参照してください。
- 次の Schema Registry Avro クライアント ライブラリ サンプルを参照してください。