3.2.4.6. イベント
PostgreSQL コネクターによって生成されたすべてのデータ変更イベントにはキーと値がありますが、キーと値の構造は、変更イベントの発生元となるテーブルによって異なります( トピック名を参照)。
Kafka 0.10 以降、Kafka はオプションでメッセージキーで記録でき、メッセージが作成された(プロデューサーによって録画)、または Kafka によってログに書き込まれる タイムスタンプ を値として指定できます。
PostgreSQL コネクターは、すべての Kafka Connect スキーマ名が 有効な Avro スキーマ名 であることを確認し ます。つまり、論理サーバー名は、ラテン文字またはアンダースコア(例: [a-z,A-Z,_])で開始し、論理サーバー名の残りの文字と、スキーマおよびテーブル名の残りの文字は、ラテン文字、数字、またはアンダースコア([a-z,A-Z,0-9,\_])で始まる必要があります。そうでない場合には、無効な文字はすべて自動的にアンダースコアに置き換えられます。
これにより、論理サーバー名、スキーマ名、およびテーブル名に他の文字が含まれる場合に予期しない競合が発生し、テーブルのフルネーム間の文字のみが無効となり、アンダースコアに置き換えられます。
Debezium および Kafka Connect は、イベントメッセージの継続的なストリームについて設計されており、これらのイベント の構造は徐々に変わる可能性があります。これはコンシューマーによる対応が困難になる可能性があるため、Kafka Connect による各イベントの自己完結が容易になります。各メッセージキーと値には、スキーマ と ペイロード の 2 つの部分があります。スキーマはペイロードの構造を記述し、ペイロードには実際のデータが含まれます。
3.2.4.6.1. Change イベントのキー リンクのコピーリンクがクリップボードにコピーされました!
特定のテーブルでは、変更イベントのキーには、イベントの作成時にテーブルのプライマリーキー(または FULL USING INDEX テーブルに REPLICA IDENTITY 設定された一意の鍵制約)内の各列のフィールドが含まれる構造があります。
public データベーススキーマで定義されている customers テーブルについて考えてみましょう。
CREATE TABLE customers (
id SERIAL,
first_name VARCHAR(255) NOT NULL,
last_name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
PRIMARY KEY(id)
);
database.server.name 設定プロパティーに値がある場合 PostgreSQL_server、この定義がある間に customers テーブルのすべての変更イベントは、JSON で使用する同じキー構造に対応します。
{
"schema": {
"type": "struct",
"name": "PostgreSQL_server.public.customers.Key",
"optional": false,
"fields": [
{
"name": "id",
"index": "0",
"schema": {
"type": "INT32",
"optional": "false"
}
}
]
},
"payload": {
"id": "1"
},
}
キーの schema 部分には、キー部分に含まれるものを記述する Kafka Connect スキーマが含まれます。この場合、payload 値はオプションではなく、という名前のスキーマによって定義される構造で PostgreSQL_server.public.customers.Key、id type という名前の必須フィールドが 1 つあることを意味し int32ます。キーのフィールドの値を確認すると、値が 1 つの payload フィールドを id 持つ構造(JSON 内のオブジェクト)であることが分かり 1ます。
そのため、このキーは、プライマリーキーコラムにの値がである public.customers テーブル(コネクターから出力 PostgreSQL_server)の行を記述する id ものとして解釈し 1ます。
column.blacklist 設定プロパティーを使用するとテーブル列のサブセットのみを取得できますが、プライマリーキーまたは一意のキーのすべての列がイベントのキーに含まれます。
テーブルにプライマリーキーまたは一意の鍵がない場合は、変更イベントのキーは null になります。これは、プライマリーキー制約や一意の鍵制約のないテーブルの行を一意に特定できないため、理にかなっています。