12.5. Debezium の変更イベントからステート after ソースレコードを抽出する

Debezium のデータ変更イベントは、さまざまな情報を提供する複雑な構造を持ちます。Debezium の変更イベントを伝える Kafka レコードには、このすべての情報が含まれています。ただし、Kafka エコシステムの一部では、フィールド名と値のフラットな構造の Kafka レコードが要求されます。この種のレコードを提供するために、Debezium ではイベントフラット化単一メッセージ変換 (SMT) を利用することができます。Debezium の変更イベントが含まれる Kafka レコードよりも単純なフォーマットの Kafka レコードをコンシューマーが要求する場合に、この変換を設定します。

イベントフラット化変換は Kafka Connect SMT です。

この変換は、SQL データベースコネクターでのみ利用することができます。

詳細は以下のセクションを参照してください。

12.5.1. Debezium 変更イベントの構造について

Debezium は、複雑な構造を持つデータ変更イベントを生成します。それぞれイベントは、以下の 3 つの部分で設定されます。

  • 以下の項目が含まれるメタデータ (ただし、これらに限定されません)

    • 変更を加えた操作
    • データベースや変更が加えられたテーブルの名前などのソース情報
    • 変更が加えられた時刻のタイムスタンプ
    • (任意の項目) トランザクション情報
  • 変更前の行データ
  • 変更後の行データ

例えば、UPDATE 変更イベントの構造の一部は次のようになります。

{
	"op": "u",
	"source": {
		...
	},
	"ts_ms" : "...",
	"before" : {
		"field1" : "oldvalue1",
		"field2" : "oldvalue2"
	},
	"after" : {
		"field1" : "newvalue1",
		"field2" : "newvalue2"
	}
}

この複雑なフォーマットは、システムで発生する変更に関するほとんどの情報を提供します。しかし、その他のコネクターや Kafka エコシステムの他の要素では、通常、以下のような単純なフォーマットのデータが要求されます。

{
	"field1" : "newvalue1",
	"field2" : "newvalue2"
}

コンシューマーが必要とする Kafka レコードのフォーマットを提供するには、イベントフラット化 SMT を設定します。