DM sync阶段时,是否会将上游mysql的事务保持事务性写入TiDB

【 TiDB 版本】
DM集群 v5.3.1

【遇到的问题】
例如mysql->DM->TiDB的场景
当mysql写入一个事务a时,DM通过解析binlog后,写入下游TiDB的时候,是会将a作为一个整体事务写入,还是会将a拆分为多个事务分别写入呢?

目前扒了扒代码,似乎并未发现区分上游事务的位置?
唯一一个有点像的是这个地方?

不会保持事务的。您这边有什么需求吗?

在金融场景下,mysql->dm->tidb->tiflash

如果不保证dm事务性同步,在实时分析金额的场景会出现异常,比如计算用户余额的时候,A的金额减少了,但是B的没加上。

我们也在计划保持事务的同步。想请问您,这种金额计算场景下

1 上游 MySQL 有开启 GTID 吗
2 对同步 QPS、延迟有什么要求吗

目前在同步完成之前不保证一致性(可能出现您描述的现象)

同步完成之前是什么概念?不提供事务一致性是因为分拆事务,并发在目标端执行的原因吗?
上游mysql是开启了gtid的,binlog采用rows方式,在binlog中会有prepare与commit的记录,若是mysql到 mysql是能保证事务完整性的?

不提供事务一致性的把 我记得dm只是同步

1、上游开启了GTID
2、延迟和qps没有太高要求,只要基本符合TiDB的性能,不严重阻塞在DM这一层就可以接受

额,这个他指的是你数据不变以后,数据完成同步。不是那种持续增量同步场景

目前我看DM代码里,是把binlog解析为单条insert类型的语句在TiDB执行sql,没有解析COMMIT

mysql到mysql是直接把整套binlog往relay log里塞,我认为mysql->mysql主从可以保证事务完整性

是的,DM 会把事务拆分开。这个设计是为了更大的并发性。mysql 同步到 mysql 如果是采用 mysql 自身的主从复制策略,它是可以保证事务一致性的(也可以设置成全异步,这样就不保证一致性);有兴趣可以阅读一下 syncer 的源码。

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。