我已经使用Debezium和SQL Server实现了发件箱模式,完成了以下指南:可靠的微服务与发件箱数据交换。
按照导游的说法,我正在做一个";插入+删除";的发件箱事件。这意味着在事务结束时,发件箱表实际上保持为空。事务日志知道插入和删除操作,因此信息不会丢失。SQL Server的CDC捕获作业;尾部";此事务日志,并将这些记录移动到捕获表中。我将此捕获表的保留期保留为3天(默认值(。
当我启动Debezium连接器时,它首先获取发件箱表的快照,然后继续捕获捕获表中的事件。问题是我的发件箱表实际上是空的,所以快照不会产生任何结果。但是,捕获表中可能有一些事件是在连接器启动之前创建的。
除了发件箱表之外,有没有一种方法可以将Debezium配置为对捕获表进行完整的快照?或者我在设置发件箱模式以避免遇到此问题时遗漏了什么?
我喜欢现有的设置,因为这意味着我不必做任何家务来将发件箱桌子保持在合适的大小。我意识到;插入+删除";在我的申请中,我只能做一个";插入";从而填充发件箱表。然后,我可以有一个存储过程/外部脚本,它可以清理发件箱表中超过某个时间(例如3天(的记录。我正在努力避免额外的内务处理过程带来的开销。
这里的主要问题与;鸡肉&鸡蛋;范式
如果连接器是新的,它将查看事务日志并记录当前位置,执行您为连接器配置的任何类型的快照步骤,然后它才会开始流式传输,但它是从我们开始时获得的当前位置开始的。
对于发件箱模式,如果你想保持插入+删除的想法,以最小化发件箱表上的记账开销,你只需要确保先启动连接器,让它执行你配置的任何初始快照任务;记录偏移量。一旦完成,您就可以安全地操作发件箱表中的记录,它们将如您所希望的那样被提取并流式传输。