3.2. データベースの更新および 更新 イベントの表示
Debezium MySQL コネクターが inventory
データベースで 作成 イベントをキャプチャーする方法を確認しました。次に、レコードの 1 つを変更し、コネクターがこれをどのようにキャプチャーするかを見てみましょう。
この手順を完了すると、データベースのコミットで変更した内容の詳細を確認する方法と、変更イベントを比較して、他の変更と関連していつ変更が発生したかを判断する方法について学ぶことができます。
手順
MySQL コマンドラインクライアントを実行しているターミナルで、以下のステートメントを実行します。
mysql> UPDATE customers SET first_name='Anne Marie' WHERE id=1004; Query OK, 1 row affected (0.05 sec) Rows matched: 1 Changed: 1 Warnings: 0
更新された
customers
テーブルを表示します。mysql> SELECT * FROM customers; +------+------------+-----------+-----------------------+ | id | first_name | last_name | email | +------+------------+-----------+-----------------------+ | 1001 | Sally | Thomas | sally.thomas@acme.com | | 1002 | George | Bailey | gbailey@foobar.com | | 1003 | Edward | Walker | ed@walker.com | | 1004 | Anne Marie | Kretchmar | annek@noanswer.org | +------+------------+-----------+-----------------------+ 4 rows in set (0.00 sec)
kafka-console-consumer
を実行しているターミナルに切り替え、新しい 5 番目のイベントを確認します。customers
テーブルのレコードを変更することで、Debezium MySQL コネクターは新しいイベントを生成しました。新しい JSON ドキュメントが 2 つあるはずです。1 つはイベントの キー のドキュメントで、もう 1 つは新しいイベントの 値 のドキュメントです。更新 イベントの キー の詳細は以下のとおりです (書式を調整して読みやすくしてあります)。
{ "schema": { "type": "struct", "name": "dbserver1.inventory.customers.Key" "optional": false, "fields": [ { "field": "id", "type": "int32", "optional": false } ] }, "payload": { "id": 1004 } }
この キー は、以前のイベントの キー と同じです。
新しいイベントの 値 は次のとおりです。
schema
セクションには変更がないため、payload
セクションのみを表しています (書式を調整して読みやすくしてあります)。{ "schema": {...}, "payload": { "before": { 1 "id": 1004, "first_name": "Anne", "last_name": "Kretchmar", "email": "annek@noanswer.org" }, "after": { 2 "id": 1004, "first_name": "Anne Marie", "last_name": "Kretchmar", "email": "annek@noanswer.org" }, "source": { 3 "name": "1.7.2.Final", "name": "dbserver1", "server_id": 223344, "ts_sec": 1486501486, "gtid": null, "file": "mysql-bin.000003", "pos": 364, "row": 0, "snapshot": null, "thread": 3, "db": "inventory", "table": "customers" }, "op": "u", 4 "ts_ms": 1486501486308 5 } }
- 1 1 1
before
フィールドは、データベースのコミット前の行と値の状態を表しています。- 2 2 2
after
フィールドは、更新された行の状態を表し、first_name
の値はAnne Marie
になっています。- 3 3 3
source
フィールド構造には以前と同じ値が多数ありますが、ts_sec
およびpos
フィールドは更新されています (他の状況ではfile
が変更されることがあります)。- 4 4 4
op
フィールドの値はu
になっており、更新によってこの行が変更されたことを示しています。- 5 5 5
- The
ts_ms
フィールドは、Debezium がこのイベントを処理したときのタイムスタンプを示します。
payload
セクションを表示すると、更新 イベントに関する重要な情報を確認できます。-
before
とafter
構造を比較することで、コミットが原因で影響を受けた行で実際に何が変更されたかを判断できます。 -
ソース
構造を確認して、MySQL の変更の記録に関する情報を確認できます(トレーサビリティーを提供)。 -
イベントの
payload
セクションと、同じトピック(または別のトピック)の他のイベントを比較することで、別のイベントと同じ MySQL コミットの前、後、または一部としてイベントが発生したかどうかを判断できます。