数据库中的成功快照表。但是当有事件插入、更新或删除时不能CDC

Posted

技术标签:

【中文标题】数据库中的成功快照表。但是当有事件插入、更新或删除时不能CDC【英文标题】:Success snapshot table in database. But can not CDC when have event insert,update or delete 【发布时间】:2021-09-10 02:55:20 【问题描述】:

我目前正在使用 debezium 连接器将 mysql 源连接到 CDC 数据。我已经成功地设置了 zookeeper、Kafka、Kafka 连接,并且我已经成功地对数据库的整个表进行了快照。我创建了一个 Kafka 消费者来消费 Kafka 代理中生成的事件。特别是主题 hieuld.magento2.cron_schedule,我收到了 op 为 'r' 的所有消息。但随后我在 MySQL 服务器中执行了一系列 UPDATE、INSERT 和 DELETE 操作,而我的使用者没有收到任何 'u'、'c' 或 'd' 消息。

谁能向我解释我面临的问题?谢谢大家。

【问题讨论】:

【参考方案1】:

您必须为 MySQL 复制启用二进制日志记录。二进制日志记录事务更新,以便复制工具传播更改。

MySQL 有一个二进制日志(binlog),它按照提交到数据库的顺序记录所有操作。这包括对表模式的更改以及对表中数据的更改。 MySQL 使用 binlog 进行复制和恢复。

Debezium MySQL 连接器读取 binlog,为行级 INSERT、UPDATE 和 DELETE 操作生成更改事件,并将更改事件发送到 Kafka 主题。客户端应用程序读取这些 Kafka 主题。

由于 MySQL 通常设置为在指定时间段后清除二进制日志,因此 MySQL 连接器会对您的每个数据库执行初始一致快照。 MySQL 连接器从创建快照的位置读取 binlog。

【讨论】:

嘿,我在 SQL Server 中总是在数据库中遇到完全相同的问题。你有什么想法吗?

以上是关于数据库中的成功快照表。但是当有事件插入、更新或删除时不能CDC的主要内容,如果未能解决你的问题,请参考以下文章

快照隔离事务由于更新冲突而中止,但没有事务开始

数据仓库之三大事实表

如何使用特定表中的列作为我需要从中删除、插入或更新数据的表名

MySql学习之插入删除和更新

使用Kettle工具进行增量数据同步

使用快照隔离防止 SQL 视图被冗长的删除/插入事务阻塞