使用 debezium 确定交易的结束

Posted

技术标签:

【中文标题】使用 debezium 确定交易的结束【英文标题】:Determining end of transaction with debezium 【发布时间】:2019-10-27 13:29:14 【问题描述】:

我想将 Debezium 与 kafka connect 一起使用,但我需要在事务结束时完成这项工作。该事务更新了许多表。我可以获得每条消息的 GTID,但我如何知道我何时收到了该交易的所有消息?在我知道所有内容都已更新之前,我无法开始处理。

【问题讨论】:

正如 Jiri 所说,我们计划在未来向 Debezium 添加对事务分界消息的支持,但目前还没有。你的用例是什么?对此有所了解将有助于我们塑造此功能。谢谢! 也许你可以给我一些关于用例的想法:我们有一个脚本可以定期运行以更新股市数据。我们有资产、价格数据等表格。目的是对更新后的数据进行计算,更新退市股票等。一个问题是历史价格数据可能会因为合并或拆分而被修改,因此我们需要知道所有价格行何时完成在我们收集整个价格历史之前进行更新,然后对其进行一些计算。我们想使用 kafka 的原因是我们可以在股票更新时重新处理它。 @Gunnar 我有一个类似的用例,需要在处理之前等待事务结束。有什么地方可以跟踪此功能的状态吗?谢谢! 【参考方案1】:

Debezium 目前不指示 tx 完成。未来的计划是为事务中的每个更改包含一个序列号,并指出哪条记录是最后一条。然后应该很容易将更改聚合回单个消息。

作为权宜之计,您可以使用 Kafka Streams 会话窗口,其中会话标识符将是事务 ID (GTID)。

【讨论】:

以上是关于使用 debezium 确定交易的结束的主要内容,如果未能解决你的问题,请参考以下文章

成功创建 Always On SQL Server 快照后,Debezium 未跟踪 CDC

Kafka Connect JDBC 与 Debezium CDC

带有 kafka 的 Debezium 还是只有嵌入式 Debezium?

Flink系列之:Debezium采集Mysql数据库表数据到Kafka Topic,同步kafka topic数据到StarRocks数据库

Debezium 发件箱模式 |如果我们使用 debezium,架构是用 SMT/发件箱表固定的吗

如何使用 debezium 处理发件箱模式?