2.5. 新機能および改善点


Debezium 2.3.4 には、以下の更新および改善点が含まれています。

2.5.1. 互換性を失わせる変更点

Debezium 2.3.4 の次の変更は、コネクターの動作に大きな違いがあり、以前の Debezium バージョンと互換性のない設定変更が必要です。Debezium 2.3.4 では、次の重大な変更が導入されています。

以前の Debezium リリースの重大な変更については、2023.Q2 リリースノート を参照してください。

2.5.1.1. MySQL および PostgreSQL のセキュア接続の新規デフォルト設定

MySQL および PostgreSQL の Debezium コネクターを設定して、セキュアな SSL 接続を使用できます。MySQL コネクターの場合、database.ssl.mode プロパティーを設定しえtセキュアなな接続の使用を指定します。PostgreSQL コネクターの場合は、database.sslmode プロパティーを設定します。

Debezium 2.3.4 以降、これらの設定オプションには新しいデフォルト値が含まれています。MySQL の場合、以前のデフォルト値の disabled に代わって、database.ssl.mode のデフォルト値が preferred になりました。PostgreSQL の場合、database.sslmode のデフォルト値は、以前のデフォルト値 disable に代わって、prefer になりました。新しいデフォルト設定をもとに、コネクターは、データベースへの接続を開始するときに、まず、セキュアで暗号化された接続を確立しようとします。安全な接続が利用できない場合、コネクターは、別途設定されていない限り、セキュアでない接続を使用するようにフォールバックします。

2.5.1.2. トピックおよびスキーマ命名の変更点

Debezium はトピック名とスキーマ名を生成するときに、スキーマレジストリーの命名規則との互換性を確保するために、名前に含まれる ASCII 以外の文字を置き換えます。以前のリリースでは、Debezium は ASCII 以外の文字をアンダースコア文字 (_) に置き換えていました。ただし、場合によっては ASCII 以外の文字を置き換えた後、Debezium が 2 つのトピックまたはスキーマに対して生成する名前が、大文字と小文字を除いて同一になる可能性があり、他の問題が発生する可能性があります。

最も互換性のある方法でこれに対処するために、Debezium はストラテジーベースのアプローチを使用して文字を独自にマップするようになりました。この新しいアプローチによる影響の 1 つとして、Debezium が sanitize.field.names 設定プロパティーがサポートされなくなっています。sanitize.field.names プロパティーの代わりに、テーブルまたはコレクションに使用する規則と互換性のある命名ストラテジーを指定するための新しいオプションが使用できるようになりました。

Debezium によるスキーマおよびフィールド名の生成方法を指定するには、以下のプロパティーを設定します。

schema.name.adjustment.mode
メッセージコンバーターとの互換性を確保するためにスキーマ名を調整する方法を指定します。
field.name.adjustment.mode
メッセージコンバーターとの互換性を確保するためにフィールド名を調整する方法を指定します。

前述の各プロパティーに対して、次のいずれかの値を設定できます。

none
名前はそのまま渡されます。スキーマ名やフィールド名は調整されません。
avro
Avro で使用できない文字をアンダースコア (_) に置き換えます。
avro_unicode
Avro で使用できないアンダースコア (_) と文字を Unicode ベースのエスケープシーケンスに置き換えます。

2.5.1.3. Oracle コネクターのソース情報ブロックの変更

Debezium が挿入、更新、および削除イベントに対して発行する変更イベントレコードには、source 情報ブロックを含むペイロードが含まれています。Oracle コネクターの場合、ソース情報ブロックには、変更の SQL シーケンス番号を表す特別な ssn フィールドが含まれています。

ソースデータベースの ssn フィールドの値が INT32 データ型の最大値 (2,147,483,647) を超える場合があります。Debezium は、より大きな値を許可するため、ssn フィールドにデータ型 INT64 を割り当てるようになり、フィールドの最大値が 9,223,372,036,854,775,807 に増加します。

現在、環境内の sink システムに ssn 値を保存している場合、またはスキーマレジストリーを使用している場合、この変更はシステムの動作に影響を与える可能性があります。

2.5.2. 一般公開 (GA) にプロモートした機能

Debezium 2.3.4 リリースでは、次の機能がテクノロジープレビューから一般公開 (GA) にプロモートされます。

MongoDB コネクターのアドホックおよび増分スナップショット
以前にスナップショットをキャプチャーしたテーブルのスナップショットを再実行するためのメカニズムを提供します。
MongoDB コネクターの シグナリング
コネクターの動作変更や、テーブルの アドホックスナップショット の開始などの 1 回限りのアクションをトリガーするためのメカニズムを提供します。
コンテンツベースルーティング
イベントの内容に基づいて、選択したイベントを特定のトピックに再ルーティングするためのメカニズムを提供します。
フィルター SMT
コネクターがブローカーに送信するレコードのサブセットを指定できます。

2.5.3. 一般公開機能

Debezium 2.3.4 では、以下の新機能がサポートされます。

2.5.3.1. PostgreSQL の自動レプリカ ID 設定

Debezium 2.3.4 では、"Autoset Replica Identity" と呼ばれる新しい PostgreSQL コネクター機能が導入されています。

PostgreSQL データベースは、レプリカ ID を使用して、挿入、更新、および削除イベントのデータベーストランザクションログにキャプチャーされた列を識別します。この機能を使用すると、テーブルのレプリカ ID 値を自動的に設定するようにコネクターを設定できます。コネクターが起動すると、レプリカ ID 設定が読み取られ、指定されたテーブルのレプリカ ID が設定されます。

新しい設定プロパティー plica.identity.autoset.values は、テーブルとレプリカの ID タプルのコンマ区切りリストを指定します。プロパティーがテーブルのレプリカ ID を指定すると、その値は既存のレプリカ ID 設定を上書きします。PostgreSQL レプリカアイデンティティータイプの詳細は、PostgreSQL のドキュメントを参照してください。

plica.identity.autoset.values プロパティーではコンマ区切りのリストを使用できます。各要素は、<fully-qualified-table-name>:<replica-identity> の形式を使用します。次の例は、FULL レプリカ ID を持つように 2 つのテーブル (table1 および table2) を設定する方法を示しています。

{ "replica.identity.autoset.values": "public.table1:FULL,public.table2:FULL" }

コネクターがデータベースにアクセスするときに使用するユーザーアカウントには、テーブルのレプリカ ID を設定する権限が必要です。アカウントに十分な権限がない場合、replica.identity.autoset.values を使用しようとすると失敗します。このプロパティーを使用してレプリカ ID を自動的に設定できない場合は、必要な権限を持つデータベースアカウントからテーブルのレプリカ ID を手動で設定する必要があります。

2.5.3.2. 新しい通知サブシステム

このリリースでは、新しい通知サブシステムが導入されています。これにより、Debezium は、増分スナップショットや従来のスナップショットなど、さまざまなコネクター操作のステータスを報告するイベントを発行できるようになります。この新しいサブシステムを使用すると、Kafka トピック、ログファイル、Java Management Extensions (JMX) など、いくつかの異なるチャネルを通じて通知を送信できます。これらの通知イベントは、さまざまな外部システムで使用できます。通知イベントは、以下のフィールドを含む一連のキー/値タプルとして表されます。

id
通知を識別する UUID
aggregate_type
ドメイン駆動型設計の概念に基づく通知のタイプ。
type
集約タイプの詳細を提供します。
additional_data (任意)
イベントに関する追加情報を含む文字列ベースのキーと値のペアのマップ。

次の例は、単純な通知イベントを示しています。

通知イベントの例

{
  "id": "c485ccc3-16ff-47cc-b4e8-b56a57c3bad2",
  "aggregate_type": "Snapshot",
  "type": "Started",
  "additional_data": {
    ...
  }
}
Copy to Clipboard Toggle word wrap

本リリースでは、Debezium は以下のタイプの通知イベントをサポートします。

  • 初期スナップショットのステータス
  • 増分スナップショットの進行状況

詳細は、コネクターのステータスをレポートするための通知設定 を参照してください。

2.5.3.3. 増分スナップショット通知 ID の関連付け

このリリースでは、通知とチャネルのサブシステムが改善され、シグナルを通知に関連付けるようになりました。つまり、シグナルを送信して、Debezium によって消費されると、結果の通知には元のシグナルを参照する識別子が含まれるようになります。通信が複数のアプリケーションおよびプロセスに分散される場合、このメカニズムにより、プロセスは、結果として行われる操作とシグナルをこれまで以上に簡単に関連付けることができます。

2.5.3.4. 新しいシグナリングチャネルのサポート

Debezium は、リリース 1.7 で増分スナップショットが導入されて以来、シグナリングをサポートしています。シグナルは、メタデータを使用して、コネクターログへのエントリーの書き込みやアドホック増分スナップショットの実行などのタスクの実行を Debezium に指示するメカニズムを提供します。

このリリースでは、複数のシグナリングチャネルのサポートが導入され、Debezium がシグナルを監視し、シグナルに反応するために使用するメディアを指定できるようになりました。以前のバージョンでは、コネクター間で共通にサポートされるチャネルが 1 つあり、それがデータベースシグナルテーブルでした。本リリースでは、デフォルトで利用できます。

  • データベースシグナルテーブル
  • Kafka シグナルトピック
  • JMX

このリリースでは、シグナルチャネルのサブシステムが改善され、JMX 経由のシグナル送信をサポートするようになりました。JConsole ウィンドウには、コネクター用の 2 つのサブセクション、通知セクション、およびシグナルセクションが存在します。

signal セクションでは、JMX Bean で操作を呼び出して、シグナルを Debezium に送信できます。このシグナルは、3 つのパラメーターを受け入れるという点で、論理信号テーブル構造に似ています。

  • 一意の ID
  • シグナルタイプ
  • シグナルペイロード

詳細は、Integration コネクターへのシグナルの送信 を参照してください。

2.5.3.5. Oracle RAC の改善

Oracle Real Application Clusters (RAC) デプロイメントで Debezium Oracle コネクターを使用する場合は、rac.nodes 設定プロパティーを指定する必要があります。少なくとも、rac.nodes プロパティーでは、クラスター内の個々のノードのホストまたは IP アドレスを指定する必要があります。コネクターの古いバージョンでは、異なるノードが異なるポートを使用する可能性がある点を認識して、各ノードに一意のポート番号を指定できる別の形式もサポートしていました。

Debezium 2.3.4 では、Oracle RAC サポートが強化され、各ノードが異なる Oracle サイト識別子 (SID) を使用する可能性があることも認識されています。Oracle SID 設定のバリエーションを考慮して、rac.nodes 設定プロパティーで SID パラメーターを指定できるようになりました。

次の例は、それぞれ異なるポートと SID パラメーターを使用する 2 つの Oracle RAC ノードへの接続を示しています。

{ "connector.class": "io.debezium.connector.oracle.OracleConnector", "rac.nodes": "host1.domain.com:1521/ORCLSID1,host2.domain.com:1522/ORCLSID2", …​ }

2.5.3.6. Oracle コネクター SCN ベースのメトリクス

Oracle は、OffsetScnCurrentScnOldestScnCommittedScn など、JMX メトリックでさまざまなシステム変更番号 (SCN) 値を追跡します。これらの SCN 値は数値であり、LONG データ型の上限を超える場合があります。以前のリリースでは、Debezium は SCN 値を 文字列 値として公開していました。

これらのメトリックの有用性を向上させるために、Debezium はこれらの JMX メトリックを String 値ではなく BigInteger 値として公開するようになりました。この変更により、ユーザーは文字列ベースの値をサポートしていない Grafana や Prometheus などのツールを使用してこれらのメトリックの値を表示できるようになります。

注記

以前に他の目的で SCN 値を収集した場合は、SCN 値が文字列ベースではなくなったため、BigInteger 数値として解釈する必要があることに注意してください。

2.5.3.7. MongoDB および Oracle コネクターのサーバー側フィルタリング

データベースからエントリーを取得する場合、MongoDB および Oracle コネクターは、コネクター設定に設定された include および exclude フィルターをデータベースに送信できるようになりました。MongoDB コネクターはこれを自動的に行います。Oracle コネクターがエントリーの取得する時にフィルターを送信するようにするには、log.mining.query.filter.mode プロパティーをデフォルトの none 以外の値に設定します。

これまでのリリースでは、MongoDB コネクターと Oracle コネクターは最初にデータベースからイベントを取得し、次にフィルター設定に対してイベントを評価しました。このプロセスにより、データベースからネットワーク上のコネクターまでのすべての変更が効率的にシリアル化されます。特に大容量環境ではこのアプローチは非効率的です。コネクターは一部のイベントを受信しましたが、フィルター設定があるため、直後にそれらのイベントを破棄しました。クラウド環境で実行されるコネクターの場合、このように大量の過剰なデータを送信すると、使用コストが膨らみます。

コネクターが取得するデータの量を減らすために、Debezium 2.3.4 では、コネクターはデータの取得後にフィルターを評価しなくなりました。代わりに、包含リストと除外リストは、MongoDB 変更ストリームサブスクリプションまたは Oracle フェッチクエリーで定義されます。新しいアプローチでは、コネクターが読み取るイベントの数を減らすことで、ネットワークと CPU の使用率が低下します。完全なドキュメントまたはプレイメージ設定を使用して設定されたコネクターの場合は、ネットワークの使用率がさらに増えますが、これは全く不必要です。さらに、コネクターが処理を必要とするイベントのみを受信できるようにすることで、コネクターはより多くの処理を完了できるようになり、CPU 使用率が向上します。

2.5.3.8. コネクターの起動時にデータベース接続を再試行する

以前のリリースでは、コネクターは起動時にフェイルファストストラテジーを使用していました。つまり、コネクターが起動ルーチンの完了に必要な手順 (データベースへの接続や認証など) を実行できない場合、コネクターは FAILED 状態になります。

状況によっては、コネクターが正常に開始され、一定期間実行された後、最終的に致命的なエラーが発生することがあります。エラーは、コネクターの起動ライフサイクル中にアクセスされなかったリソースに関連している可能性があるため、エラーの発生なしにコネクターを再起動できる場合があります。ただし、データベースが利用できなくなったことが原因で障害が発生した場合、コネクターの再起動後にデータベースが使用できなくなったままになると、コネクターが FAILED 状態になります。この場合、問題を解決するには人間が介入する必要があります。

信頼性と復元力を向上させるために、このリリースでは、コネクターは、起動時に使用できない可能性のあるリソースへのアクセスを試行するのではなく、ライフサイクルの後半でこれらのリソースへのアクセスを試行するようになりました。実質的には、Debezium は起動中は、利用できない可能性のあるリソースにアクセスすることに関しては厳密ではないので、Kafka Connect の再試行バックオフフレームワークを活用できます。

現在、コネクターの起動中にデータベースが利用できない場合でも、Kafka Connect の再試行が有効になっている限り、コネクターは失敗したリクエストを再試行し続けます。FAILED 状態は、再試行の最大回数に達した場合、または再試行不可能なエラーが発生した場合にのみ発生します。

2.5.3.9. 増分スナップショットでの代理キーの使用

Debezium の増分スナップショット機能は、再開可能で一貫性のあるデータのスナップショットを実行するメカニズムを提供します。スナップショットを再開するこの機能は、大量のデータを取り込む必要があるコネクターにとって重要です。

以前のリリースでは、増分スナップショットでは、スナップショットに含まれるすべてのテーブルにプライマリーキーを設定する必要がありました。Debezium 2.3.4 以降では、テーブルに "代理キー" として機能する一意のものが 1 つ含まれている限り、キーのないテーブルで増分スナップショットを実行できるようになりました。

警告

増分スナップショットに代理キーを使用する機能は、Debezium リレーショナルコネクターにのみが対象です。この機能は MongoDB コネクターでは使用できません。

インクリメンタルスナップショットシグナルで、代理キー列データを提供するには、シグナルペイロードに新しい代理キー属性 surrogate-key を含める必要があります。

代理キーを指定する増分スナップショットのシグナルペイロードの例

{
  "data-collections": [ "public.mytab" ],
  "surrogate-key": "customer_ref"
}
Copy to Clipboard Toggle word wrap

前の例のシグナルは、public.mytab テーブルの増分スナップショットを開始します。スナップショットは、スナップショットウィンドウを生成するためのプライマリーキーとして customer_ref 列を使用します。

警告

代理キーを定義するには、単一の列を使用する必要があります。複数の列をベースにする代理キーは、定義できません。

プライマリーキーが含まれるテーブルで代理キー機能を使用することもできます。たとえば、テーブルのプライマリーキーが複数の列で構成されている場合、代理キーには利点があります。複数の列に基づくクエリーでは、プライマリーキーの列ごとに論理和述語が生成され、パフォーマンスは環境に大きく依存する可能性があります。代理キーを使用してクエリー内の列の数を減らすと、より均一なパフォーマンスが得られます。

代理キーを使用すると、プライマリーキー列が文字ベースのデータ型をベースにするテーブルにも利点があります。一般にリレーショナルデータベースは、数値比較を行う場合と文字比較を行う場合の方が効率的であるため、数値代理キーを指定してクエリーのパフォーマンスを向上させることができます。

2.5.3.10. ExtractChangedRecordState SMT

このリリースでは、イベントレコード変更 (ExtractChangedRecordState) の単一メッセージ変換 (SMT) が導入されています。この変換を使用すると、Debezium イベントのフィールドで、データベースの操作の後に値が変更されたもの、または変更されていないものを識別できます。変換を使用するには、以下のようにコネクター設定の一部としてその変換を設定します。

transforms=changes
transforms.changes.type=io.debezium.transforms.ExtractChangedRecordState
transforms.changes.header.changed=ChangedFields
transforms.changes.header.unchanged=UnchangedFields
Copy to Clipboard Toggle word wrap

この変換に対して次のオプションを設定して、さまざまな種類の変更を示すことができます。

header.changed
イベントによって変更されたフィールドを表示します。
header.unchanged
イベントによって変更されないフィールドを表示します。

前の例と同様に、これらのオプションの両方を設定して、変更されたフィールドと変更されていないフィールドの両方を個別に表示できます。

変換を行うことで、指定された名前 (ChangedFields など) の新しいヘッダーが追加されます。次に、変更されたフィールドまたは変更されていないフィールドの名前を含むリストに、ヘッダー値を設定します。

ExtractChangedRecordState SMT の使用に関する詳細は、Debezium ユーザーガイドの イベントレコードの変更 を参照してください。

ExtractNewRecordState シングルメッセージ変換 (SMT) を使用して、Debezium 変更イベントを sink コネクターで使用できる簡素化された形式に変換できます。

このリリースでは、イベントのペイロードまたはメッセージキーからフィールドを削除するために使用できる、変換用の 3 つの新しい設定オプションが追加されました。

drop.fields.header.name
ドロップされるソースメッセージ内のフィールド名をリストするために使用する Kafka メッセージヘッダー名。
drop.fields.from.key
キーからフィールドも削除するかどうかを指定します。デフォルトは false です。
drop.fields.keep.schema.compatible
オプションのフィールドのみを削除するかどうかを指定します。デフォルトは true です。
注記

Avro を使用する環境でスキーマの互換性を維持するために、SMT はデフォルトで強制的にスキーマの互換性を確保します。したがって、必須フィールドを削除するように設定した場合、スキーマの互換性を無効にしない限り、SMT はキーまたはペイロードからフィールドを削除しません。

変更されたフィールドのみが含まれるイベントの出力

ExtractChangedRecordState 変換と更新された ExtractNewRecordState SMT を組み合わせて、変更されたフィールドのみを含むイベントを発行するようにコネクターを設定できます。次の例は、イベントのペイロード値の変更された列のみを出力する設定を示しています。

transforms=changes,extract
transforms.changes.type=io.debezium.transforms.ExtractChangedRecordState
transforms.changes.header.unchanged=UnchangedFields
transforms.extract.type=io.debezium.transforms.ExtractNewRecordState
transforms.extract.drop.fields.header.name=UnchangedFields
Copy to Clipboard Toggle word wrap

前述の設定では変更されていないフィールドがリストされますが、このようなフィールドはイベントペイロードから削除されません。指定したキーのフィールドが変更されなかった場合、設定は drop.fields.from.key のデフォルトの false 値を明示的に変更しないため、そのフィールドは保持されます。

SMT によってイベントペイロード内の必須フィールドが変更されなかったことが原因でドロップされる場合、スキーマ互換性を確保するために、フィールドは出力内に保持されます。

ExtractNewRecordState SMT の詳細は、Debezium 変更イベントからの after 状態のソースレコードの抽出 を参照してください。

2.5.3.12. HeaderToValue SMT

イベントレコードから指定されたヘッダーフィールドを抽出し、そのヘッダーフィールドをイベントレコード内の値にコピーまたは移動します。詳細は、Debezium ユーザーガイド メッセージヘッダーのイベントレコード値への変換 を参照してください。

2.5.3.13. パーティションルーティング SMT

PartitionRouting SMT を使用すると、1 つ以上の指定されたペイロードフィールドの値に基づいて、イベントを特定の宛先パーティションにルーティングできます。Debezium は、宛先パーティションを計算するために、指定したフィールド値のハッシュを生成します。

詳細は、Debezium ユーザーガイドの ペイロードフィールドに基づくレコードのパーティションへのルーティング を参照してください。

2.5.4. テクノロジープレビュー機能

このリリースでは、次のテクノロジープレビュー機能が導入されています。

重要

テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でのテクノロジープレビュー機能の実装は推奨しません。テクノロジープレビュー機能は、近々発表予定の製品イノベーションをリリースに先駆けてご提供することにより、お客様は機能性をテストし、開発プロセス中にフィードバックをお寄せいただくことができます。サポート範囲の詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

2.5.4.1. MongoDB シャードクラスターの改善 (テクノロジープレビュー)

過去のリリースでは、シャードクラスターデプロイメントで Debezium MongoDB コネクターを使用すると、コネクターにより、シャード内の各レプリカセットとの直接接続が確立されました。このアプローチは、コネクターが mongos ルーターインスタンスとの接続を開く必要がある という MongoDB 提案と競合します。

このリリースでは、推奨される接続ストラテジーを使用するようにコネクターが再設計されました。シャードクラスターでコネクターを使用する場合は、コネクターが mongos インスタンスに接続するように設定を調整します。その他の変更は必要ありません。

MongoDB マルチレプリカおよびシャードクラスターで増分スナップショットを使用できるようになりました。詳細は、{NameUserGuide} の MongoDB の章の増分スナップショット を参照してください。

以前に利用可能だったテクノロジープレビュー機能

以前のリリースで導入された次の機能はテクノロジープレビューのままです。

並列初期スナップショット
必要に応じて、snapshot.max.threads プロパティーを 1 より大きい値に設定すると、初期スナップショットの実行時に複数のスレッドを使用するように SQL ベースのコネクターを設定できます。
CloudEvents コンバーター
CloudEvents 仕様に準拠する変更イベントレコードが出力されます。CloudEvents の変更イベントのエンベロープは、JSON または Avro であり、各エンベロープタイプは data フォーマットとして JSON または Avro をサポートしています。
カスタム開発コンバーター
デフォルトのデータ型変換がニーズを満たさない場合は、コネクターで使用するカスタムコンバーターを作成できます。
Oracle コネクターでの BLOBCLOB、および NCLOB データ型の使用
Oracle コネクターは、Oracle のラージオブジェクトタイプを使用できます。

2.5.5. 開発者プレビュー機能

この Debezium 2.3.4 リリースには、次の開発者プレビュー機能が含まれています。

重要

開発者プレビュー機能は、Red Hat ではいかなる形でもサポートされていません。また、機能的には完全ではなく、実稼働環境に対応していません。開発者プレビューのソフトウェアを実稼働ワークロードまたはビジネスクリティカルなワークロードには使用しないでください。開発者プレビューソフトウェアは、今後 Red Hat 製品サービスとして追加される可能性のある製品ソフトウェアを前もって早期に利用できます。お客様はこのソフトウェアを使用して機能をテストし、開発プロセス中にフィードバックを提供できます。このソフトウェアにはドキュメントが存在しない可能性があり、変更または削除される可能性があります。また、限定的なテストしか行われていません。Red Hat は、関連する SLA なしに、開発者プレビューソフトウェアに対するフィードバックを送信する手段を提供する場合があります。

Red Hat 開発者プレビューソフトウェアのサポート範囲の詳細は、開発者プレビューのサポート範囲 を参照してください。

2.5.5.1. JDBC sink コネクター (開発者プレビュー)

このリリースでは、リレーショナルデータベースおよび非リレーショナルデータベース用のソースコネクターのみを長年の間開発してきたことを打ち切り、Debezium は JDBC sink コネクターの実装を導入しました。Debezium JDBC sink コネクターは、最初にイベントフラット化変換を適用せずに Debezium コネクターによって出力される未加工の変更イベントを取得できるという点で、他のベンダーの実装とは異なります。Debezium JDBC sink コネクターは、列型の伝播などのネイティブの Debezium ソースコネクター機能を利用できるため、データパイプラインの処理フットプリントを削減し、設定を簡素化できる可能性があります。

次の例は、orders と呼ばれる Kafka トピックから変更イベントを PostgreSQL データベースに取り込むための簡単な設定を示しています。トピック内のイベントは、ExtractNewRecordState 変換を使用せずに、Debezium MySQL コネクターによって発行されています。

{
  "name": "mysql-to-postgres-pipeline",
  "config": {
    "connector_class": "io.debezium.connector.jdbc.JdbcSinkConnector",
    "topics": "orders",
    "connection.url": "jdbc://postgresql://<host>:<port>/<database>",
    "connection.user": "<username>",
    "connection.password": "<password>",
    "insert.mode": "upsert",
    "delete.enabled": "true",
    "primary.key.mode": "record_key",
    "schema.evolution": "basic"
  }
}
Copy to Clipboard Toggle word wrap

前述の例は、宛先 PostgreSQL データベースにアクセスするための接続文字列と認証情報を定義する一連の connection.* プロパティーを示しています。宛先データベースに書き込む場合、レコードは UPSERT セマンティクスを使用し、レコードが存在しない場合は挿入を使用してレコードを作成し、レコードが存在する場合はレコードを更新します。スキーマ進化が有効になり、テーブルのキー列がイベントのプライマリーキーから派生します。

以下のリレーショナルデータベースでこのリリースの JDBC sink コネクターを使用できます。

  • Db2
  • MySQL
  • Oracle
  • PostgreSQL
  • SQL Server

詳細は、JDBC の Debezium コネクター を参照してください。

2.5.5.2. MySQL コネクター: 並列スナップショット (開発者プレビュー)

Debezium の初期スナップショットプロセスは、リレーショナルデータベースでは常にシングルスレッドでした。この制限は主に、複数のトランザクション間でデータの一貫性を確保するのが複雑であることに起因します。

このリリース以降、一貫性のあるデータベーススナップショットを実行するときに複数のスレッドを使用するようにコネクターを設定できるようになりました。この実装では、これらの複数のスレッドを使用し、テーブルレベルのスナップショットを並行して実行します。

並列スナップショットを利用するには、コネクター設定で snapshot.max.threads プロパティーを指定し、それに 1 より大きい値を割り当てます。

並列スナップショットを使用した設定の例

snapshot.max.threads=4
Copy to Clipboard Toggle word wrap

前の例に基づいて、コネクターは最大 4 つのテーブルのスナップショットを並行して作成します。スナップショットを作成するテーブルがさらにある場合、1 つのスレッドが終了した後、コネクターはキュー内の次のテーブルを処理します。このプロセスは、すべてのテーブルのスナップショットが作成されるまで続行されます。

Oracle 用の Debezium コネクターは、Oracle ログライターバッファー (LGWR) プロセスのフラッシュサイクルを監視するための内部 フラッシュテーブル を管理します。コネクターがデータベースへのアクセス時に使用するユーザーアカウントには、フラッシュテーブルの作成と書き込みの権限が必要です。ロジカルスタンバイデータベースにはデータ操作に関してより制限的なルールがあり、読み取り専用である場合もあるため、データベースへの書き込みは好ましくないことや、許可されないことさえあります。

コネクターが Oracle の読み取り専用ロジカルスタンバイデータベースから変更を取り込めるようにするために、このリリースでは、この フラッシュテーブル の作成と管理を無効にするフラグが導入されています。この開発者プレビュー機能は、Oracle スタンドアロンおよび Oracle RAC インストールの両方で使用できます。

コネクターが Oracle 読み取り専用ロジカルスタンバイから変更を取り込めるようにするには、次のコネクターオプションを追加します。

internal.log.mining.read.only=true
Copy to Clipboard Toggle word wrap

2.5.5.4. PostgreSQL コネクターの 1 回限りの配信 (開発者プレビュー)

Debezium は従来、最低 1 回は行うデリバリーソリューションで、変更が見逃されることはありませんでした。1 回限りのデリバリーは、KIP-618 の一部として Apache Kafka コミュニティーによって提案されています。この提案は、プロデューサー (ソースコネクター) が再試行中に遭遇する一般的な問題に対処することを目的としています。ブローカーがすでにバッチをコミットしている場合でも、コネクターはイベントのバッチを Kafka ブローカーに再送信する場合があります。この状況では、重複したイベントが送信される可能性があり、重複を簡単に処理できないコンシューマー (sink コネクター) に問題が発生する可能性があります。

1 回限りのデリバリーを利用するためにコネクター設定を変更する必要はありません。ただし、1 回限りのデリバリーを有効にするには、KIP-618 で導入された設定プロパティー を使用するように Kafka Connect ワーカー設定を調整する必要があります。Debezium 2.3.4 では、PostgreSQL の 1 回限りのセマンティクスはスナップショット中ではなく、ストリーミングフェーズ中にのみ適用されます。

2.5.6. このリリースのその他の更新

この Debezium 2.3.4 リリースでは、次のリストの項目を含む、いくつかの機能の更新と修正が提供されます。

  • DBZ-1973 Debezium がステータスに関する通知を送信できるようにする
  • DBZ-2296 Debezium GTID 使用の制御を改善する
  • DBZ-2979 除外された列の変更後にコネクターがイベントレコードを発行する
  • DBZ-3594 snapshot.collection.include.list を使用すると、リレーショナルスキーマが正しく投入されない
  • DBZ-4027 シグナリングチャネルを設定可能にする
  • DBZ-4488 失敗した再試行可能な操作は無限に再試行される
  • DBZ-4663 MySQL コネクターからドライバークラスを指定するオプションが削除される
  • DBZ-4829 event.processing.failure.handling.mode プロパティーが MySQL ドキュメントに存在しない
  • DBZ-5282 Debezium は Apicurio およびカスタムトラストストアでは機能しない
  • DBZ-5283 ExtractNewRecordState SMT で変更されていないフィールドを除外するオプションを追加する
  • DBZ-5395 LOB が有効な場合に、フィルターされたイベントによるトランザクションコミット時にコネクターオフセットが進まない
  • DBZ-5490 デフォルトの REPLICA IDENTITY のドキュメント message.key.columns および tombstone イベントを制限する
  • DBZ-5798 MySQL BIGINT のデータ型変換に失敗する
  • DBZ-5917 名前にバックスラッシュ \ が含まれる場合にリストを含む列または表を指定できない
  • DBZ-5879 コネクター起動時のデータベース接続失敗の再試行をサポートする
  • DBZ-5907 Oracle では変更を元に戻すことができない
  • DBZ-5915 再起動時に PostgreSQL データが失われる
  • DBZ-5945 Oracle マルチスレッドでデータが失われる
  • DBZ-5966 ExtractNewRecordState と互換性のないレコードが切り捨てられる
  • DBZ-5967 計算されたパーティションに負の値を指定できない
  • DBZ-5973 MongoDB 増分スナップショットが機能しない
  • DBZ-5985 snapshot.select.statement.overrides 表のサイズログメッセージが正しくない
  • DBZ-5988 DBZ-5988 間違ったテーブル名を指定すると exclude.tables 設定で execute.snapshot のシグナルで NPE が発生する
  • DBZ-5991 PostgreSQL コネクターの通貨タイプの境界値の解析に問題がある
  • DBZ-5993 MySqlDatabaseSchema の解析できない DDL 文のログ文にプレースホルダが含まれている
  • DBZ-6001 PostgreSQL コネクターは通貨タイプの null を 0 に解析する
  • DBZ-6003 Null 許容列が DDL イベントで "optional: false" とマークされる
  • DBZ-6012 PostgreSQL LSN チェックでは event.processing.failure.handling.mode が考慮される必要がある
  • DBZ-6026 PostgreSQL コネクターでエラーが発生した場合に接続オフセットトピックでオフセットがフラッシュされない
  • DBZ-6029 TIME 列: 8:00 の形式が想定外である
  • DBZ-6031 Oracle は LOB 記憶域句の後の圧縮/ロギング句をサポートしていない
  • DBZ-6037 Debezium はエラーとともに完全なメッセージをログに記録する
  • DBZ-6039 Kafka からの内部スキーマ履歴リカバリー時の耐久性が向上する
  • DBZ-6046 PostgreSQL データベースのアップグレード実行時に Debezium の手順を追加する
  • DBZ-6051 増分スナップショットがシグナリングデータベースから Kafka にイベントを送信する
  • DBZ-6064 ログステートメントのパスワードがマスクされる
  • DBZ-6075 カスタムオフセットストレージのロードが Class not found エラーで失敗する
  • DBZ-6079 query.fetch.size のデフォルトをゼロより大きい適切な値に増やす
  • DBZ-6084 データベースの数が maxTasks より小さい場合に SQL Server タスクが失敗する
  • DBZ-6089 CloudEvents メッセージ ID のシーケンスフィールドを公開する
  • DBZ-6094 キャプチャーされたテーブルに関連するイベントがトランザクションに含まれない場合にスキップされたトランザクションの情報の詳細を減らす
  • DBZ-6107 LOB サポートを使用している場合に複数の行を UPDATE するとイベントデータの整合性が取れなくなる可能性がある
  • DBZ-6112 PostgreSQL: コネクターの起動時にレプリカ ID を設定する
  • DBZ-6122 処理でさまざまな文字配列と日付配列が Toast (トースト) されると PostgreSQL コネクターが失敗する
  • DBZ-6131 MongoDB の集約パイプライン手順を使用した変更ストリームフィルタリングをサポートする
  • DBZ-6219 対象の表のデータのみを格納するようにスキーマ履歴トピックを設定する方法に関する情報が強調表示される
  • DBZ-6254 LogMiner クエリーフィルタリングモードを導入する
  • DBZ-6256 複数のコネクターがデプロイされている場合に LOG_MINING_FLUSH 表でロック競合が発生する
  • DBZ-6329 Oracle 変更イベントソース情報ブロックの rs_id フィールドが null である
  • DBZ-6353 PostgreSQL10 でサポートされていない pg_replication_slot_advance を使用している
  • DBZ-6355 log.mining.transaction.retention.hourssysdate ではなく最後のオフセットを参照する必要がある
  • DBZ-6366 skip.messages.without.change のコードが改善される
  • DBZ-6379 Toast された hstore が正しく処理されない
  • DBZ-6386 表パーティションの Oracle DDL 縮小領域を解析できない
  • DBZ-6396 レプリケーションスロットがアクティブであるため、PostgreSQL コネクタータスクがストリーミングを再開できない
  • DBZ-6402 無効な再開トークンで MongoDB コネクターがクラッシュする
  • DBZ-6439 スナップショット中に、Oracle コネクターがキャプチャーされたテーブルの構造を読み取るのに時間がかかりすぎる
  • DBZ-6457 マルチテナンシーの使用時に Oracle 並列スナップショットで PDB コンテキストが適切に設定されない
  • DBZ-6459 [MariaDB] userstat プラグインキーワードのサポートが追加される
  • DBZ-6474 ドキュメント内の Oracle snapshot.include.collection.list には、接頭辞として databaseName を付ける必要がある
  • DBZ-6485 DB2 コネクターが通知送信時に NPE で失敗することがある
  • DBZ-6486 ExtractNewRecordState SMT を HeaderToValue SMT と組み合わせると、予期しないフィールド名例外が発生する
  • DBZ-6490 キューのメモリーサイズ制限が設定されている場合に BigDecimal に問題が発生する
  • DBZ-6492 Oracle 表を取得できず、runtime.NoViableAltException が発生する
  • DBZ-6496 シグナルのポーリング間隔のデフォルト値が正しくない
  • DBZ-6502 Oracle JDBC ドライバー 23.x で ORA-18716 が発生する。どのタイムゾーンでも発生するわけではない
  • DBZ-6509 FileSignalChannel がロードされない
  • DBZ-6512 Debezium の増分スナップショットのチャンクサイズに関するドキュメントが不明確または間違っている
  • DBZ-6513 convertOracleIntervalDaySecond の値が負の値 (秒単位) で誤っている
  • DBZ-6515 Debezium の増分スナップショットのチャンクサイズに関するドキュメントが不明確または間違っている
  • DBZ-6524 [PostgreSQL] LTree データがストリーミングでキャプチャーされない
  • DBZ-6528 Oracle コネクター: 特定の組み合わせでスナップショットが失敗する
  • DBZ-6529 PartitionRouting にはより適切なハッシュ関数を使用する
  • DBZ-6533 スナップショットでの表の順序が正しくない
  • DBZ-6543 PartitionRouting で未処理の NullPointerException が発生すると、接続プラグイン全体がクラッシュする
  • DBZ-6559 field.name.adjustment.mode プロパティーで問題が発生する
  • DBZ-6585 Oracle ではサポートされていない DDL ステートメント - 複数のパーティションを削除する
  • DBZ-6589 UUID、JSON、および JSONB データ型が PostgreSQL の型変換をサポートする
  • DBZ-6590 MySQL パーサーは CAST AS dec を解析できない
  • DBZ-6599 コメントでセミコロンが難読化されている場合に Oracle DDL パーサーがステートメントの終わりを適切に検出しない
  • DBZ-6605 テーブルスキャン完了通知の DataCollection を修正した
  • DBZ-6610 ORA-01327 が別の JDBC または Oracle 例外によってラップされている場合に Oracle コネクターはリカバリーできなくなる
  • DBZ-6613 MySQL (Percona 5.7.39-42) プロシージャ解析時に致命的エラーが発生する
  • DBZ-6622 RETAIN CURRENT PASSWORD を指定した MySQL ALTER USER が解析例外で失敗する
  • DBZ-6628 additional-condition に関するドキュメントが正確ではない
  • DBZ-6633 Oracle 接続 SQLRecoverableExceptions はデフォルトでは再試行されない
  • DBZ-6643 MongoDB コネクターが起動し続けるDBZ-6670 で修正
  • DBZ-6648: NULL 以外の間隔値は削除できない
  • DBZ-6670 エラーハンドラーが再利用されないため、再試行可能な操作が無限に再試行される
  • DBZ-6677 Oracle DDL パーサーは ALTER TABLE での列の可視性をサポートしていない
  • DBZ-6690 MBean 命名では、connector.server.name ではなく topic.prefix を使用する必要がある
  • DBZ-6716 Oracle が DROP USER の処理に失敗する
  • DBZ-6724 MySQL DDL ステートメント (特定の JOIN) の解析時に Debezium がクラッシュする
  • DBZ-6725 MongoDB の ExtractNewDocumentState は、REWRITE で削除イベントを処理するときに以前のドキュメントの状態を無視する
  • DBZ-6733 上限が指定の距離内にない場合、Oracle LogMiner マイニング距離の計算はスキップされる必要がある
  • DBZ-6736 MariaDB: DDL 文が解析できない (ALTER TABLE IF EXISTS)
  • DBZ-6758 postgres コネクターで pgoutput を使用する場合に (+/-)Infinity は 10 進数値でサポートされない
  • DBZ-6760 送信トレイの変換によりコネクターがクラッシュする可能性がある
  • DBZ-6774 MongoDB の新しいドキュメント状態の抽出: add.headers のフィールドが存在しない
  • DBZ-6777 JMX チャネルの使用時に MBean インスタンス間で通知とシグナルが漏洩する
  • DBZ-6780 MySQL DDL ステートメント (SELECT 1.;) の解析時に Debezium がクラッシュする
  • DBZ-6794 MySQL DDL ステートメントの解析時に Debezium がクラッシュする (SELECT 1 + @sum:=1 AS ss;)
  • DBZ-6803 DDL パーサーで REPEAT 関数を使用できないため、MySQL コネクター例外が発生する
  • DBZ-6821 DDL ステートメントでラテン文字以外の文字を含む変数名を宣言すると Debezium がクラッシュする
  • DBZ-6824 MySQL DDL を解析するときに、コネクターは BIGINT および SMALLINT タイプのデフォルト値を適切にトリミングするようになった
  • DBZ-6830 部分応答トランザクションと複数応答トランザクションはデバッグモードでのみ記録されるようになった
  • DBZ-6867 データベースフィルターと信号収集の組み合わせによりストリーミング集約パイプラインが破損する
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat