Debezium初始数据快照和相关实体顺序

问题描述

第一次启动后,Debezium将对已经存在的数据进行初始数据快照。

假设我有两个表-AB。表B对NOT NULL具有A FK约束。根据Debezium的默认方法-Debezium将为表AB中的数据创建两个单独的Kafka主题。

据我了解,我很有可能会尝试在新表B中创建记录,而适当的记录A将不会出现在适当的新表{{1 }}。这样,我将遇到约束违反错误。

我是否需要使用一些内部第3方缓冲区并由我自己组织插入接收器数据库的正确顺序,或者Debezium中有某种标准机制来处理这种情况?

例如-我可以使用 Debezium主题路由 https://debezium.io/documentation/reference/configuration/topic-routing.html来解决此问题吗?我可以潜在地配置主题路由,以将所有依赖事件(来自上面示例中的表A和B)发送到同一主题。如果Kafka主题具有单个分区,则必须以正确的方式对所有事件进行排序。它会正常工作,这样我将为初始快照数据加载指定正确的相关实体顺序吗?

解决方法

IBM IDR(数据复制)产品通过一种解决方案解决了这一问题,该解决方案仅允许一次语义,并重新创建事务在事务中的顺序和事务的顺序。

Kafka内置的功能一旦具备了一些性能以外的限制,就不会从本质上使操作按顺序对事务进行重新排序,这对于诸如引用完整性约束应用之类的事情很重要。

因此,在我们的产品中,我们有解决问题的正确而贫穷的方式。穷人是将所有表的所有数据发送到一个主题。显然,这不是最佳选择,但是如果您这样做,我们的产品将按单个生产者的操作顺序生成数据。您可能希望幂等性来避免批次出现乱序。

现在,解决此问题的专业方法是称为TCC(交易一致消费者)的功能。

我不确定您是否需要企业级解决方案的性能和功能。

如果这是一个非关键项目,那么您可能会发现以下讨论对我们如何提供所需的功能很有帮助。

https://www.confluent.io/kafka-summit-sf18/a-solution-for-leveraging-kafka-to-provide-end-to-end-acid-transactions/

这是我们提供的有关功能的文档供您参考。

https://www.ibm.com/support/knowledgecenter/en/SSTRGZ_11.4.0/com.ibm.cdcdoc.cdckafka.doc/concepts/kafkatcc.html

这应该为为什么这个问题难以解决以及希望解决的问题提供背景知识。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...