3.3. 删除数据库中的记录并查看 删除 事件
现在,您已了解 Debezium MySQL 连接器如何捕获 inventory 数据库中的 create 和 update 事件,现在您可以删除其中一个记录以查看连接器如何捕获它。
通过完成此步骤,您将了解如何查找 删除 事件的详情,以及 Kafka 如何使用 日志压缩 来减少 删除 事件的数量,同时仍使消费者获得所有事件。
流程
在运行 MySQL 命令行客户端的终端中,运行以下命令:
mysql> DELETE FROM customers WHERE id=1004; Query OK, 1 row affected (0.00 sec)
mysql> DELETE FROM customers WHERE id=1004; Query OK, 1 row affected (0.00 sec)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果上述命令失败并显示外键约束违反情况,则必须使用以下语句从 address 表中删除客户 地址 的引用:
mysql> DELETE FROM addresses WHERE customer_id=1004;
mysql> DELETE FROM addresses WHERE customer_id=1004;Copy to Clipboard Copied! Toggle word wrap Toggle overflow 切换到运行
kafka-console-consumer的终端,以查看 两个新 事件。通过删除
customers表中的行,Debebe MySQL 连接器会生成两个新事件。对第一个新时间检查 key 和 value。
以下是第一个新事件 的密钥 详情(用于可读性的格式):
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个 key 与在前两个事件中的 key 相同。
以下是第一个新事件 的值 (用于可读性的格式):
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 因此,此事件提供了一个消费者,其中包含处理删除行所需的信息。还提供了旧值,因为有些使用者可能需要它们正确处理移除。
为第二个新时间检查 key 和 value。
以下是第二个新事件 的密钥 (用于可读性的格式):
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 同样,这个 key 与前三个事件的键完全相同。
以下是同一事件 的值 (用于可读性的格式):
{ "schema": null, "payload": null }{ "schema": null, "payload": null }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果将 Kafka 设置为 日志紧凑,它将从主题中删除旧的消息,如果主题中至少有一个消息有相同的键。此最后一个事件称为 tombstone 事件,因为它有一个键和一个空值。这意味着 Kafka 将使用相同的键删除所有之前的信息。尽管会删除上述消息,但 tombstone 事件意味着用户仍然可以从开始而不是丢失任何事件读取该主题。