【发布时间】:2020-11-28 10:57:09
【问题描述】:
我想在 PostgreSQL 数据库上使用 Debezium 进行变更数据捕获 (CDC)。现在我还不完全了解如何在 Debezium 中处理事务。
让我们考虑以下示例 - 我在源 PostgreSQL 数据库中有 2 个表。我在单个数据库事务的范围内将数据插入到这两个表中。换句话说,我必须执行两个单独的 INSERT 语句。如果我在 Debezium CDC 的情况下理解正确,它将导致两个单独的消息进入两个单独的 Kafka 主题(或 AWS Kinesis 流)。这些消息中的每一个都将由自己的消费者使用,并在单独的事务中插入到目标数据库中。如果其中一个事务失败,另一个事务可以成功,我会在目标数据库中遇到数据不一致状态。
Debezium 中是否有任何标准机制来处理这种情况?或者例如,为了避免它,我必须在更新目标数据库之前使用 Kafka Streams API 并将这两个主题合并为一个(在 transactionId 上)?
【问题讨论】:
标签: postgresql transactions cdc debezium