次の方法で共有


Azure Event Hubs のスキーマ レジストリ

Azure Event Hubs の Schema Registry には、多くの利点があります。 Schema Registry は、データの一貫性の維持、スキーマの進化の簡素化、相互運用性の強化、疎結合ワークフローとイベント ストリーミング ワークフローでの開発作業の削減に役立ちます。 大規模な分散型組織で、スキーマ用の一元化されたリポジトリを使用している場合は、Schema Registry を使用することで、運用上のオーバーヘッドを最小限に抑えながら、信頼性の高いデータ処理とガバナンスを実現できます。

Azure Event Hubs のスキーマ レジストリは、スキーマ駆動型のイベント ストリーミング シナリオにおいて、次のような多くの役割を果たします。

  • 複数のスキーマを登録、管理、および進化できるリポジトリを提供
  • 複数の互換性規則を使用してスキーマの進化を管理
  • スキーマ化されたすべてのデータに対してデータの入力規則を実行
  • プロデューサー用とコンシューマー用のクライアント側のライブラリ (シリアライザーとデシリアライザー) を提供
  • すべてのペイロードでスキーマ定義ではなくスキーマ ID を渡すことで、ネットワーク スループットの効率を向上

Azure Event Hubs のスキーマ レジストリは、Standard、Premium、Dedicated の各レベルでサポートされています。

スキーマ レジストリのコンポーネント

このスキーマ レジストリは Event Hubs 名前空間の一部ですが、Azure メッセージング サービスを含む他のメッセージまたはイベント ブローカーでも使用できます。 スキーマ レジストリは、複数のスキーマ グループで構成されており、スキーマの論理的なグループとして機能し、他のスキーマ グループとは独立して管理できます。

Azure Event Hubs のスキーマ レジストリのコンポーネントを示す図。

スキーマ

疎結合システムでは、主にデータを介して複数のアプリケーションが通信します。 スキーマは、データの構造を宣言的に定義します。 その結果、プロデューサー アプリケーションとコンシューマー アプリケーション間のコントラクトが明確に定義され、大規模な処理でも高い信頼性が保証されます。

スキーマ定義には次のものが含まれます。

  • フィールド: 名前、書籍のタイトル、住所などの個々のデータ要素。
  • データ型: 文字列、日付時刻、配列など、格納できるデータの型。
  • 構造: 入れ子になった構造や配列など、フィールドの構成方法。

スキーマでは、プロデューサーとコンシューマーの間のコントラクトが定義されています。 Event Hubs スキーマ レジストリで定義されるスキーマは、イベント データとは別のコントラクトを管理するのに役立ち、ペイロードのオーバーヘッドを除去できます。

スキーマの形式

スキーマ形式は、スキーマが構造化および定義される方法を決定するために使用されます。 各形式は、イベント ストリーミングに使用されるイベントの構造を定義するための具体的なガイドラインと構文の概要を示しています。

Avro スキーマ

Apache Avro は広く使用されているデータ シリアル化システムであり、コンパクトなバイナリ形式を使用し、スキーマの進化機能を提供します。

Event Hubs スキーマ レジストリで Avro スキーマ形式を使用する方法の詳細については、次のリンクを参照してください。

JSON スキーマ

JSON (JavaScript Object Notation) スキーマは、イベントの構造とデータ型を定義する標準化された方法です。 JSON スキーマを使用すると、イベント ストリーミングで JSON データ形式を確実かつ信頼性の高い方法で使用できます。

Event Hubs スキーマ レジストリで JSON スキーマ形式を使用する方法の詳細については、「Kafka と JSON スキーマでスキーマ レジストリを使用する方法」を参照してください。

プロトコル バッファー

プロトコル バッファー (Protobuf) は、構造化データをシリアル化するための、言語に依存しない、プラットフォームに依存しない拡張可能なメカニズムです。 データ構造を効率的に定義し、コンパクトなバイナリ形式にシリアル化するために使用されます。

スキーマ グループ

スキーマ グループは、ビジネス条件に従って編成された、類似したスキーマの論理グループです。 スキーマ グループは次の情報を保持しています。

  • 複数のスキーマ定義。
  • 特定のスキーマの複数のバージョン。
  • グループ内のすべてのスキーマの種類と互換性に関するメタデータ。

スキーマ グループは、特定のアプリケーションまたは組織単位に合わせたスキーマ レジストリのサブセットであり、個別の認可モデルを持つものと考えることができます。 この追加のセキュリティ境界により、共有サービス モデルでメタデータや企業秘密が漏洩しないようにするのに役立ちます。 また、アプリケーション所有者は、同じ名前空間を共有する他のアプリケーションとは独立して、スキーマを管理することもできます。

スキーマの展開

スキーマは、プロデューサーとコンシューマーのビジネス要件に合わせて進化する必要があります。 Schema Registry では、スキーマ グループ レベルでの互換性モードの導入によってスキーマの進化がサポートされています。 スキーマ グループを作成するときに、そのスキーマ グループに含めるスキーマの互換性モードを指定できます。 スキーマを更新する場合、スキーマの新しいバージョンを作成できるように、割り当てられた互換モードに準拠する必要があります。

スキーマの進化は、Avro スキーマ形式のみでサポートされています。

Schema Registry は、次の互換モードでサポートされています。

下位互換性

下位互換モードでは、コンシューマー コードでスキーマの新しいバージョンを使用し、古いバージョンのスキーマでメッセージを処理できます。 下位互換モードでは、スキーマに対して次の変更を行うことができます。

  • フィールドを削除する
  • 省略可能なフィールドの追加

上位互換性

上位互換性により、コンシューマー コードで古いバージョンのスキーマを使用して、新しいスキーマでメッセージを読み取ることができます。 上位互換モードでは、スキーマに対して次の変更を行うことができます。

  • フィールドを追加する
  • 省略可能なフィールドの削除

互換性なし

None 互換モードを使用する場合、スキーマの更新時に Schema Registry による互換性チェックは行われません。

クライアント SDK

Avro シリアライザーを含めるには、次のいずれかのライブラリを使用できます。 スキーマ レジストリ用のスキーマ識別子と Avro でエンコードされたデータを含むペイロードをシリアル化および逆シリアル化するには、次の Avro シリアライザーを使用できます。

プログラミング言語 SDK サンプル
.NET Microsoft.Azure.Data.SchemaRegistry.ApacheAvro .NET のサンプル
Java azure-data-schemaregistry-avro Java のサンプル
Python azure-schemaregistry-avroserializer Python のサンプル
JavaScript @azure/schema-registry-avro NodeJS サンプル

さらに、以下のライブラリもワークロードに基づいて使用できます。

  • Apache Kafka: Schema Registry によって提供される Kafka 統合 Avro シリアライザーと逆シリアライザーを実行します。 Schema Registry 用の Java クライアントの Apache Kafka クライアント シリアライザーは、Apache Kafka のあらゆるシナリオで、任意の Apache Kafka ベースのデプロイまたはクラウド サービスと共に使用できます。
  • Azure CLI: Azure CLI を使用してスキーマ グループにスキーマを追加する例については、「Azure CLI を使用したスキーマ グループへのスキーマの追加」を参照してください。
  • PowerShell: PowerShell を使用してスキーマ グループにスキーマを追加する例については、「PowerShell を使用したスキーマ グループへのスキーマの追加」を参照してください。

制限

Event Hubs の制限 (名前空間で使用できるスキーマの数など) については、「Event Hubs のクォータと制限」を参照してください。

Azure ロールベースのアクセス制御

スキーマ レジストリにプログラムでアクセスするには、次の手順に従います。

  1. Microsoft Entra ID でアプリケーションを登録します
  2. アプリケーションのセキュリティ プリンシパルを、名前空間レベルで、次の Azure ロールベースのアクセス制御 (RBAC) ロールのいずれかに追加します。
役割 説明
所有者 スキーマ レジストリ グループとスキーマの読み取り、書き込み、削除
Contributor スキーマ レジストリ グループとスキーマの読み取り、書き込み、削除
スキーマ レジストリ閲覧者 スキーマ レジストリ グループとスキーマの読み取りおよび一覧表示
スキーマ レジストリ共同作成者 スキーマ レジストリ グループとスキーマの読み取り、書き込み、削除

Azure portal を使用してアプリケーションを作成および登録する方法については、「Microsoft Entra ID を使用してアプリケーションを登録する」を参照してください。 コードで使用するには、クライアント ID (アプリケーション ID)、テナント ID、シークレットが必要です。