Yriuns
(Yriuns)
1
binlog的文档里 https://docs.pingcap.com/zh/tidb/stable/tidb-binlog-overview 写着
TiDB Binlog 与 TiDB v5.0 版本开始引入的以下特性不兼容,无法一起使用:
* TiDB 系统变量 tidb_enable_async_commit:启用 TiDB Binlog 后,开启该选项无法获得性能提升。要获得性能提升,建议使用 TiCDC 替代 TiDB Binlog。
是因为 pump 里的key有可能是commit_ts,而异步提交的commit_ts不保证唯一吗?
我们将 Pump 抽象成了一个简单的 kv 数据库,key 为 binlog 的 start _ts
(Priwrite binlog) 或者 commit_ts
(Commit binlog),value 为 binlog 的元数据,binlog 的数据则存在数据文件中。
xfworld
(魔幻之翼)
2
这篇文章也描述了,不论是 start_ts 还是 commit_ts 都是通过 PD 的 TSO来提供的
TSO目前就是唯一的,对于事务而言,不论是乐观事务,还是悲观事务,同一时间内只有一个事务可以commit成功。
TiCDC 对于数据的处理方式,和 tidb 的binlog 方案有很大的差别,
数据是通过 tidb 的入口进去的,然后
主要的区别在这里…
希望能帮到你
Yriuns
(Yriuns)
3
那就是因为async commit的commit_ts不一定是从pd拿到的值,所以和binlog不兼容吗?
xfworld
(魔幻之翼)
4
我给你解释了处理方式, TS 获取的方式 肯定是一致的
但是对于数据处理的方式完全不一样了,ticdc 和binlog 肯定不兼容了
Yriuns
(Yriuns)
5
可能我没说清楚,我的问题是async commit(异步提交)和binlog为什么不兼容,不是ticdc和binlog兼不兼容
xfworld
(魔幻之翼)
6
没理解到哪个点吧
2pc (两阶段提交的事务),被简化后,变成 1pc ( 一阶段提交) 【异步提交的方式】
那么以前在tidb 节点上,需要完成的 2 PC被简化了 变成 1PC ,会影响到 tidb 生成 binlog 的机制
基本上是冲突的,因为tidb 无法掌控事务是否被提交,就无法捕捉事务变化的过程
但是 ticdc 的机制,刚好对这个方式进行了一个补充
1 个赞