13.2. スキーマを検索するストラテジー
Kafka クライアントシリアライザーは 検索ストラテジーを 使用して、メッセージスキーマが Service Registry に登録されるアーティファクト ID およびグローバル ID を決定します。
特定のトピックおよびメッセージで、以下の Java インターフェースの実装を使用できます。
-
ArtifactIdStrategy
、アーティファクト ID を返す。 -
GlobalIdStrategy
、グローバル ID を返す。
各ストラテジーのクラスは、io.apicurio.registry.utils.serde.strategy
パッケージに編成されます。デフォルトのストラテジーは、アーティファクト ID TopicIdStrategy
で、メッセージを受信する Kafka トピックと同じ名前の Service Registry アーティファクトを検索します。
例
public String artifactId(String topic, boolean isKey, T schema) { return String.format("%s-%s", topic, isKey ? "key" : "value"); }
-
topic
パラメーターは、メッセージを受信する Kafka トピックの名前です。 -
isKey
パラメーターは、メッセージキーがシリアライズされる場合はtrue
、メッセージ値がシリアライズされる場合はfalse
です。 -
schema
パラメーターは、シリアライズまたはデシリアライズされるメッセージのスキーマです。 -
返される
artifactID
は、スキーマが Service Registry に登録されるアーティファクト ID です。
使用する検索アップストラテジーは、スキーマを保存する方法と場所によって異なります。たとえば、同じ Avro メッセージタイプを持つ Kafka トピックが複数ある場合、レコード ID を使用するストラテジーを使用することがあります。
アーティファクト ID ストラテジー
アーティファクト ID ストラテジーは、Kafka トピックおよびメッセージ情報を Service Registry のアーティファクト ID にマップする方法を提供します。マッピングの共通規則は、Kafka メッセージのキーと値のどちらにシリアライザーを使用するかによって、Kafka トピック名と key
または value
を結合することです。
ただし、Service Registry によって提供されるストラテジーを使用するか、io.apicurio.registry.utils.serde.strategy.ArtifactIdStrategy
を実装するカスタム Java クラスを作成して、マッピングの代替規則を使用できます。
アーティファクト ID を返すストラテジー
Service Registry は、ArtifactIdStrategy
の実装に基づいてアーティファクト ID を返す以下のストラテジーを提供します。
RecordIdStrategy
- スキーマのフルネームを使用する Avro 固有のストラテジー。
TopicRecordIdStrategy
- トピック名およびスキーマのフルネームを使用する Avro 固有のストラテジー。
TopicIdStrategy
-
トピック名と、
key
またはvalue
サフィックスを使用するデフォルトストラテジー。 SimpleTopicIdStrategy
- トピック名のみを使用する単純なストラテジー。
グローバル ID ストラテジー
グローバル ID ストラテジーは、アーティファクト ID ストラテジーによって提供されるアーティファクト ID の下に登録されたスキーマの特定バージョンを見つけて識別します。すべてのアーティファクトのすべてのバージョンには、グローバルで一意の識別子が 1 つだけあり、それを使用してそのアーティファクトの内容を取得できます。このグローバル ID はすべての Kafka メッセージに含まれ、デシリアライザーは Service Registry からスキーマを適切にフェッチできます。
グローバル ID ストラテジーは、既存のアーティファクトバージョンを検索できます。見つからない場合は、使用するストラテジーに応じて登録できます。io.apicurio.registry.utils.serde.strategy.GlobalIdStrategy
を実装するカスタム Java クラスを作成して、独自のストラテジーを指定することもできます。
グローバル ID を返すストラテジー
Service Registry は、GlobalIdStrategy
の実装に基づいてグローバル ID を返す以下のストラテジーを提供します。
FindLatestIdStrategy
- アーティファクト ID に基づいて最新のスキーマバージョンのグローバル ID を返すストラテジー。
FindBySchemaIdStrategy
- アーティファクト ID に基づいてスキーマコンテンツと一致する、グローバル ID を返すストラテジー。
CachedSchemaIdStrategy
- スキーマをキャッシュし、キャッシュされたスキーマのグローバル ID を使用するストラテジー。
GetOrCreateIdStrategy
- アーティファクト ID に基づいて最新のスキーマを取得しようとし、存在しない場合は新しいスキーマを作成するストラテジー。
AutoRegisterIdStrategy
- スキーマを更新し、更新されたスキーマのグローバル ID を使用するストラテジー。
グローバル ID ストラテジーの設定
グローバル ID ストラテジーに以下のアプリケーションプロパティーを設定できます。
-
Apicurio
.registry.check-period-ms
: リモートスキーマ検索期間をミリ秒単位で設定します。
アプリケーションプロパティーを Java システムプロパティーとして設定することも、Quarkus application.properties
ファイルに含めることもできます。詳細は、Quarkus のドキュメント を参照してください。