第8章 Debezium カスタムデータ型コンバーターの開発
カスタム開発コンバーターの使用は、テクノロジープレビュー機能のみです。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
Debezium 変更イベントレコードの各フィールドは、ソーステーブルまたはデータコレクションのフィールドまたは列を表します。コネクターが変更イベントレコードを Kafka に送信すると、ソースの各フィールドのデータ型が Kafka Connect スキーマ型に変換されます。列の値も同様に、変換先フィールドのスキーマタイプに一致するように変換されます。コネクターごとに、コネクターが各データ型を変換する方法をデフォルトのマッピングで指定します。これらのデフォルトマッピングは、各コネクターのデータ型のドキュメントで説明されています。
通常、デフォルトのマッピングで十分ですが、一部のアプリケーションでは別のマッピングを適用する場合があります。たとえば、デフォルトのマッピングが UNIX エポック以降のミリ秒の形式を使用して列をエクスポートする場合は、カスタムマッピングが必要になることがありますが、ダウンストリームアプリケーションは、フォーマットされた文字列としてしか、列の値を消費できません。カスタムコンバーターを開発およびデプロイして、データ型マッピングをカスタマイズします。特定のタイプのすべての列に作用するようにカスタムコンバーターを設定するか、特定のテーブル列のみに適用されるように範囲を狭めてください。コンバーター関数は、指定された基準に一致する列のデータ型変換リクエストをインターセプトし、指定の変換を実行します。コンバーターは、指定された基準に一致しない列を無視します。
カスタムコンバーターは、Debezium サービスプロバイダーインターフェイス (SPI) を実装する Java クラスです。コネクター設定で converters プロパティーを設定して、カスタムコンバーターを有効化および設定します。converters プロパティーは、コネクターで使用できるコンバータを指定し、変換動作をさらに変更するサブプロパティーを含めることができます。
コネクターを開始すると、コネクター設定で有効になっているコンバーターがインスタンス化され、レジストリーに追加されます。レジストリーは、各コンバーターと、そのコンバーターの列またはフィールドを関連付けて処理します。Debezium が新しい変更イベントを処理するときはいつでも、設定されたコンバーターを呼び出して、登録されている列またはフィールドを変換します。
以下の手順は、Debezium リレーショナルデータベースソースコネクターにのみ適用されます。この情報を使用して、Debezium MongoDB コネクターまたは Debezium JDBC シンクコネクター用のカスタムコンバータを作成できません。
8.1. Debezium カスタムデータ型コンバーターの作成 リンクのコピーリンクがクリップボードにコピーされました!
以下の例は、インターフェイス io.debezium.spi.converter.CustomConverter を実装する Java クラスのコンバーター実装を示しています。
| 項目 | 説明 |
|---|---|
| 1 | データをある型から別の型に変換します。 |
| 2 | コンバーターを登録するためのコールバック。 |
| 3 | 現在のフィールドの指定のスキーマとコンバーターを登録します。同じフィールドに対して複数回呼び出すことはできません。 |
| 4 | 特定のフィールドで使用するカスタマイズされた値とスキーマコンバーターを登録します。 |
カスタムコンバーターメソッド
CustomConverter インターフェイスの実装には、以下のメソッドが含まれている必要があります。
configure()コネクター設定に指定されたプロパティーをコンバーターインスタンスに渡します。
configureメソッドは、コネクターが初期化されると実行されます。複数のコネクターでコンバーターを使用し、コネクターのプロパティー設定に基づいてその動作を変更できます。configureメソッドは以下の引数を受け入れます。props- コンバーターインスタンスに渡すプロパティーが含まれています。各プロパティーは、特定のタイプの列値を変換する形式を指定します。
converterFor()コンバーターを登録して、データソースの特定の列またはフィールドを処理します。Debezium は、
converterFor()メソッドを呼び出して、コンバーターに変換のregistrationを呼び出すように促します。converterForメソッドは、各列に対して 1 回実行されます。
メソッドは以下の引数を受け入れます。field- 処理されるフィールドまたは列に関するメタデータを渡すオブジェクト。列のメタデータには、列またはフィールドの名前、テーブルまたはコレクションの名前、データ型、サイズなどを含めることができます。
登録-
対象のスキーマ定義と列データを変換するコードを提供する
io.debezium.spi.converter.CustomConverter.ConverterRegistration型のオブジェクト。ソース列が、コンバーターが処理する型と一致する場合に、コンバーターはregistrationパラメーターを呼び出します。registerメソッドを呼び出して、スキーマ内の各列のコンバーターを定義します。スキーマは、Kafka ConnectSchemaBuilderAPI を使用して表されます。
8.1.1. Debezium カスタムコンバーターの例 リンクのコピーリンクがクリップボードにコピーされました!
以下の例は、以下の操作を実行する単純なコンバーターを実装します。
-
コネクター設定で指定された
schema.nameプロパティーの値に基づいてコンバーターを設定するconfigureメソッドを実行します。コンバーターの設定は、各インスタンスに固有です。 データ型が
isbnに設定されているソース列の値を処理するコンバーターを登録するconverterForメソッドを実行します。-
schema.nameプロパティーに指定された値に基づいてターゲットSTRINGスキーマを識別します。 -
ソース列の ISBN データを
String値に変換します。
-
例8.1 簡単なカスタムコンバーター
8.1.2. Debezium および Kafka Connect API モジュールの依存関係 リンクのコピーリンクがクリップボードにコピーされました!
カスタムコンバーター Java プロジェクトには、Debezium API および Kafka Connect API ライブラリーモジュールに対するコンパイル依存関係があります。以下の例のように、これらのコンパイル依存関係は、プロジェクトの pom.xml に含める必要があります。
| 項目 | 説明 |
|---|---|
| 1 |
|
| 2 |
|