课程名称:3.5 增量同步工具 TiCDC
学习时长:36min
课程收获:使用TiCDC 数据迁移工具,将 TiDB 数据同步到其他数据系统
课程内容:
-
TiCDC简介
-
TiCDC是什么
- CDC = Change Data Capture
- 一个将TiDB中的增量数据实时同步到其他系统的工具
-
架构
-
特性
-
高可用
- TiKV是数据源
- 自动failover
-
高性能
- 同步时延大约3秒
-
丰富的生态系统
- 支持MySQL兼容的数据库
- 支持Kafka(Avrogeshi/Canal格式/Maxwell格式)
- 支持Pulsar
-
环形同步
-
-
-
部署TiCDC
-
软硬件要求
-
两种部署方式
-
部署到已有的TiDB集群
- 通过tiup扩容操作来完成
- tiup cluster scale-out scale-out.yaml
- 可部署任意数量的TiCDC
-
-
全新部署
-
tiup cluster deploy v4.0.7 topology.yaml
-
最小部署
- 1 * TiDB
- 3 * PD
- 3 * TiKV
- 2 * TiCDC
-
-
-
创建同步任务
-
同步任务在TiCDC中成为changefeed
-
cdc cli
-
管理TiCDC集群和changefeed
-
通过cdc cli changefeed命令创建同步任务
- cdc cli changefeed create --pd=http://127.0.0.1:2379 --sink-uri=“mysql://root:123456@127.0.0.1:3306/”
- cdc cli chagefeed list --pd=http://127.0.0.1:2379
-
Kafka Sink
-
–sink-uri=“kafka://127.0.0.1:9092/cdc-test”
-
Canal格式
- –sink-uri=“kafka://127.0.0.1:9092/cdc-test?protocol=canal”
-
-
-
同步的表的限制
- 必须有主键或唯一索引
- 至少又一个唯一索引声明为NOT NULL
-
-
环形同步
-
什么是环形同步
- 在多个TiDB集群中同步同一个数据库或表
-
使用
-
创建环形同步使用的mark tables
- cdc cli changefeed cyclic create-marktables --cyclic-upstrea-dsn=“root@tcp(${TIDB_A_HOST}:${TIDB_A_PORT})/” --pd=“http://${PD_A_HOST}:${PD_A_PORT}”
- cdc cli changefeed cyclic create-marktables --cyclic-upstrea-dsn=“root@tcp(${TIDB_B_HOST}:${TIDB_B_PORT})/” --pd=“http://${PD_B_HOST}:${PD_B_PORT}”
- cdc cli changefeed cyclic create-marktables --cyclic-upstrea-dsn=“root@tcp(${TIDB_C_HOST}:${TIDB_C_PORT})/” --pd=“http://${PD_C_HOST}:${PD_C_PORT}”
-
创建环形同步任务
-
在TiDB集群A上创建环形同步任务
- cdc cli changefeed create --sink-uri=“mysql://root@${TiDB_B_HOST}/” --pd=“http://${PD_A_HOST}:${PD_A_PORT}” --cyclic-replica-id 1 --cyclic-filter-replica-ids 2 --cyclic-sync-ddl true
-
在TiDB集群B上创建环形同步任务
- –cyclic-replica-id 2 --cyclic-filter-replica-ids 3 --cyclic-sync-ddl true
-
在TiDB集群C上创建环形同步任务
- -cyclic-replica-id 3 --cyclic-filter-replica-ids 1 --cyclic-sync-ddl false
-
–cyclic-replica-id 为上游集群指定replica id
-
–cyclic-filter-replica-ids 指定需要过滤的写入来源id,通常为下游集群id
-
–cyclic-sync-ddl 指定是否同步ddl到下游
-
-
上图中
- 所有集群都接受DML
- 只有A接受DDL
- 为了避免DDL环形同步,禁止了集群C向A同步DDL
-
-
-
-
-
TiCDC运维
-
暂停任务
- cli cdc changefeed pause --pd=… --changefeed-id xxx
-
恢复任务
- cli cdc changefeed resume --pd=… --changefeed-id xxx
-
删除任务
- cli cdc changefeed remove --pd=… --changefeed-id xxx
-
查询任务列表
- cli cdc changefeed list
-
查询某个任务
- cli cdc changefeed query --pd=xxx --changefeed-id=xxx
-