使用ticdc如何进行全量+增量同步?

使用什么方式进行全量同步?在全量同步完之后,在创建增量同步的时候,怎么确定增量同步的start-ts的值?求高手们指点一下!多谢!如果这个start-ts值小了,就会有重复记录,如果大了,就会遗漏数据。

不管是用dumpling还是br导出全量都会记录一个ts,用这个去接增量就可以

2 个赞

主要还是想用代码的方式来实现全量+增量,如果数据量比较大dumpling可能也不方便,还涉及到目标端数据库的表结构创建等。

全量用其他方式,这个主要是用来增量

1 个赞

数据量大一般是用的br做全量备份,备份日志结尾会有BackupTS,把这个ts作为你cdc增量备份的start-ts就可以了。

2 个赞

先br做全量,然后cdc增量

这个就是脚本啊,把手动变成自动化的,具体步骤都是一样,就是加各种状态检查

正解,全量备份的BackupTs作为cdc的start-ts

1.问题:使用什么方式进行全量同步?
答:

  • 基量数据如果不大,比如在 GB级别,可以使用 dumpling 并发导出工具导出,lightning 物理或逻辑导入方式写入下游集群。
  • 基量数据如果在 TB级别,建议使用 BR工具进行物理备份,并且在下游使用 BR 物理恢复。这里需要用到 S3 作为外部存储,需求提前申请和准备好。

2.问题:怎么确定增量同步的start-ts的值?
答:

  • 如果使用的是BR工具备份,那么在它备份元数据或者输出日志里,会有一个BackupTS,这个时间戳表示物理备份的最后时刻。你搭建同步任务的时候,可以以这个时间戳加1为起点,配置同步任务即可。
  • 如果你用的是 dumpling 工具导出数据,在导出的数据目录里会有一个 metadata 文件,里面会记录导出数据的TSO,可以以它加1作为start-ts的值。

3.问题:start-ts值小了,就会有重复记录,如果大了,就会遗漏数据。
答:其实TiCDC同步数据时可重入的,只要你的表有唯一键(主键或者普通唯一键),那么在遇到相同的数据时,会用最新的去覆盖它。TiCDC是通过 safe_mode 来控制这个行为,比如遇到相同数据时会把insert或update转为replace语句,实现可重入操作。
所以,如果你的start-ts的值是小了,不会造成重复记录(前提表要有唯一键);start-ts的值大了,确实会丢数据。

所以,只要start-ts的值小于等于你导出数据的快照时间戳,即可正常搭建同步流。

1 个赞

取 start_ts 小点就行了,ticdc 要求必须有主键,它的操作是幂等的

回答的好细 大佬

全量同步

  1. 使用 DM 进行全量同步
  • DM 支持从 MySQL、MariaDB、Amazon RDS、Aurora 等数据库进行全量同步到 TiDB。
  • 使用 DM 的 full-mode,可以完成全量数据迁移。
  • 全量同步完成后,DM 会自动切换到增量同步模式。
  1. 使用 TiCDC 进行全量同步
  • TiCDC 支持从 TiDB 集群同步数据到另一个 TiDB 集群或兼容的下游系统。
  • TiCDC 不直接支持全量同步,但可以通过暂停 TiDB 的写入操作,然后使用 TiDB 的 BR (Backup & Restore) 工具进行全量备份,再将备份数据恢复到目标 TiDB 集群,最后启动 TiCDC 同步增量数据。

确定增量同步的 start-ts

增量同步的 start-ts(起始时间戳)是一个非常重要的参数,它决定了增量同步从哪个时间点开始。正确选择 start-ts 可以避免数据重复或遗漏。

  1. 使用 DM
  • DM 工具在全量同步完成后会自动记录一个 checkpoint(检查点),这个检查点的时间戳就是增量同步的 start-ts
  • 如果需要手动设置 start-ts,可以在 DM 的任务配置文件中指定。
  1. 使用 TiCDC
  • TiCDC 同步时,start-ts 可以通过查询 TiDB 的 cdc cli 工具获取。
  • 使用 cdc clichangefeed query 命令可以查看现有的同步任务信息,包括 start-ts
  • 如果需要手动设置 start-ts,可以在创建 Changefeed 时通过 --start-ts 参数指定。

避免 start-ts 设置不当

  • 避免 start-ts 设置过小:这可能会导致同步重复数据。确保 start-ts 是全量同步完成后的时间点。
  • 避免 start-ts 设置过大:这可能会导致数据遗漏。确保 start-ts 不大于全量同步完成后的第一个增量数据的时间戳。

安全措施

  • 在设置 start-ts 之前,确保全量同步已经完成,并且没有任何新的写入操作。
  • 在开始增量同步之前,可以备份目标 TiDB 集群,以防万一需要回滚。
1 个赞

8.1 之后支持 Debezium,就可以支持你的想法了…

但是下游的系统或者服务,需要对接 Debezium 的事件处理了

1 个赞

ticdc api中没有看到safe_mode相关信息

TICDC不推荐使用

为什么在上游使用了 TiDB Lightning 物理导入模式和 BR 恢复了数据之后,TiCDC 同步会出现卡顿甚至卡住?

目前 TiCDC 尚未完全适配 TiDB Lightning 物理导入模式 (Physical Import Mode) 和 BR,请避免在使用 TiCDC 同步的表上使用 TiDB Lightning 物理导入模式和 BR。否则,可能会出现未知的错误,例如 TiCDC 同步卡住、同步延迟大幅增加、或者同步数据丢失。

flink-cdc说是支持tidb的全量复制+增量复制,它的全量+增量复制不知道是怎么做的?好像用到了tidb的快照功能,tidb支持快照吗?

不靠谱…

如果你需要全量 + 增量的话,可以试试 tidb 8.1.0 这个版本,看看 TICDC 怎么开启 Debezium支持的

Debezium 默认是支持全量 + 增量的

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