4.3. 删除数据库中的记录并查看 删除 事件
现在,您已了解 Debezium MySQL 连接器如何捕获 inventory 数据库中的 create 和 update 事件,现在您可以删除其中一个记录以查看连接器如何捕获它。
通过完成此步骤,您将了解如何找到有关 删除 事件的详细信息,以及 Kafka 如何使用 日志压缩 来减少 删除 事件的数量,同时仍允许用户获取所有事件。
流程
在运行 MySQL 命令行客户端的终端中,运行以下语句:
mysql> DELETE FROM customers WHERE id=1004; Query OK, 1 row affected (0.00 sec)注意如果上述命令失败并显示外键约束违反情况,则必须使用以下声明从 addresses 表中删除客户地址的引用:
mysql> DELETE FROM addresses WHERE customer_id=1004;切换到运行
kafka-console-consumer的终端,以查看 两个新 事件。通过删除
customers表中的行,Debezium MySQL 连接器会生成两个新事件。对第一个新时间检查 key 和 value。
以下是第一个新事件 的密钥 详情(针对可读性格式化):
{ "schema": { "type": "struct", "name": "dbserver1.inventory.customers.Key", "optional": false, "fields": [ { "field": "id", "type": "int32", "optional": false } ] }, "payload": { "id": 1004 } }这个 key 与在前两个事件中的 key 相同。
以下是第一个新事件 的值 (针对可读性格式化):
{ "schema": {...}, "payload": { "before": {1 "id": 1004, "first_name": "Anne Marie", "last_name": "Kretchmar", "email": "annek@noanswer.org" }, "after": null,2 "source": {3 "name": "3.0.8.Final", "name": "dbserver1", "server_id": 223344, "ts_sec": 1486501558, "gtid": null, "file": "mysql-bin.000003", "pos": 725, "row": 0, "snapshot": null, "thread": 3, "db": "inventory", "table": "customers" }, "op": "d",4 "ts_ms": 1486501558315,5 "ts_us": 1486501558315901,6 "ts_ns": 14865015583159016877 } }Expand 表 4.2. 事件值中的字段描述 项 描述 1
before字段现在具有与数据库提交删除的行状态。2
after字段为null,因为行不再存在。3
source字段结构有许多与以前相同的值,但ts_sec和pos字段的值已改变。在某些情况下,file值也可能改变。4
现在,他
opfield 值是d,表示该记录已被删除。5
ts_ms、ts_us和ts_ns字段显示时间戳来指示 Debezium 处理事件的时间。因此,此事件提供了一个消费者,其中包含处理删除行所需的信息。也提供了旧值,因为有些用户可能需要它们才能正确处理删除。
为第二个新时间检查 key 和 value。
以下是第二个新事件 的密钥 (针对可读性格式化):
{ "schema": { "type": "struct", "name": "dbserver1.inventory.customers.Key" "optional": false, "fields": [ { "field": "id", "type": "int32", "optional": false } ] }, "payload": { "id": 1004 } }同样,这个 key 与前三个事件的键完全相同。
以下是同一事件 的值 (针对可读性格式化):
{ "schema": null, "payload": null }如果将 Kafka 设置为 日志紧凑,如果稍后在同一键的主题中至少有一个消息,它将从主题中删除旧的信息。最后一个事件称为 tombstone 事件,因为它有一个键和一个空值。这意味着 Kafka 将删除具有相同键的所有之前信息。虽然删除了前面的信息,tombstone 事件表示用户仍然可以从开始读取主题,而不会丢失任何事件。