Azure Event Hubs のスキーマ レジストリ
Azure Event Hubs のスキーマ レジストリは、スキーマ駆動型イベント ストリーミング シナリオでスキーマを使用および管理するためのリポジトリを提供します。
スキーマ レジストリのコンポーネント
Event Hubs 名前空間では、イベント ハブ (または Kafka トピック) と共にスキーマ グループをホストできます。 スキーマ レジストリをホストし、複数のスキーマ グループを持つことができます。 スキーマ レジストリは Azure Event Hubs でホストされますが、すべての Azure メッセージング サービスとその他のメッセージまたはイベント ブローカーで汎用的に使用できます。 これらの各スキーマ グループは、一連のスキーマに対して個別にセキュリティ保護できるリポジトリです。 グループは、特定のアプリケーションまたは組織単位に合わせることができます。
スキーマ グループ
スキーマ グループは、ビジネス条件に基づく類似したスキーマの論理グループです。 スキーマ グループには、複数のバージョンのスキーマを保持できます。 スキーマ グループの互換性適用設定によって、新しいスキーマ バージョンに下位互換性を持たせることができます。
グループ化メカニズムによって課せられるセキュリティ境界によって、名前空間が複数のパートナー間で共有されている場合に、メタデータを通じて企業秘密が誤って漏洩するのを防ぐことができます。 また、同じ名前空間を共有する他のアプリケーションから独立して、アプリケーション所有者がスキーマを管理することもできます。
スキーマ
スキーマでは、プロデューサーとコンシューマーの間のコントラクトが定義されています。 Event Hubs スキーマ レジストリで定義されるスキーマは、イベント データ外のコントラクトを管理するのに役立つため、ペイロードのオーバーヘッドを除去できます。 スキーマには、名前、型 (例: record、array など)、互換性モード (none、forward、backward、full)、およびシリアル化の種類 (現時点では Avro のみ) が含まれます。 複数のバージョンのスキーマを作成して、特定のバージョンのスキーマを取得して使用することができます。
スキーマの形式
スキーマ形式は、スキーマが構造化および定義される方法を決定するために使用されます。各形式は、イベント ストリーミングに使用されるイベントの構造を定義するための特定のガイドラインと構文を示しています。
Avro スキーマ
Avro は一般的なデータ シリアル化システムであり、コンパクトなバイナリ形式を使用し、スキーマの展開機能を提供します。
Event Hubs スキーマ レジストリで Avro スキーマ形式を使用する方法の詳細については、以下を参照してください。
JSON スキーマ
JSON スキーマは、イベントの構造とデータ型を定義する標準化された方法です。 JSON スキーマを使用すると、イベント ストリーミングで JSON データ形式を確実かつ信頼性の高い方法で使用できます。
Event Hubs スキーマ レジストリで JSON スキーマ形式を使用する方法の詳細については、以下を参照してください。
スキーマの展開
スキーマは、プロデューサーとコンシューマーのビジネス要件に合わせて進化する必要があります。 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 ロールベースのアクセス制御 (Azure RBAC) ロールのいずれかに追加します。
Role | 説明 |
---|---|
所有者 | 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 クライアント ライブラリ サンプルを参照してください。