课程名称:3.5 How to use TiCDC (增量同步工具 TiCDC)
学习时长:
40分钟
课程收获:
掌握 TiCDC 数据迁移工具,将 TiDB 数据同步到其他数据系统。
课程内容:
一、了解TICDC
- TICDC
CPC是Chang Data Capture的简称,通常将上游数据库写入数据实时同步到下游数据库中,TiCDC就是为TiDB实现的实时数据同步工具,可以将TiDB中的增量数据实时同步到其他系统。 - 架构
- 特性
- 高可用:TiKV是TICDC的数据源,只要TiKV能正常访问,TICDC就可以正常同步数据,自动故障转移
- 高性能:TICDC直接将TiKV中的增量数据同步,减少了很多开销,延迟一般为3秒
- 丰富的生态对接
兼容MySQL数据库;直接以Avro、Canal或Maxwell格式输出至Kafka;支持将数据输出到Pulsar。 - Cyclic 同步:支持在不同的TiDB数据库同步同一张数据表,最终达到数据一致
二、部署TICDC集群
- 软硬件需求
- 部署方式
- 用TiUP将TiCDC部署至已有的TiKV或TiDB中
- 用TiUP将TiCDC部署至全新的集群中
三、创建TICDC同步任务
1.通过CDC CLI管理TICDC集群,TICDC的cdc cli changefeed管理同步任务
- 创建一个同步任务到下游MySQL中
$ cdc cli changefeed create --pd=http://127.0.0.1:2379 --sink-uri=“mysql://root:123456@127.0.0.1:3306” - 通过changefeed list查看性能同步任务的状态
$ cdc cli changefeed list --pd=http://127.0.0.1:2379 - 支持sink uri设置下游MySQL/TiDB的链接参数
$ cdc cli changefeed create --pd=http://1270.0.1:2379 --sink-url=“mysql://root:123456@127.0.0.1:3306/?worker-count=16&max-txn -row=5000” - kafka设置
$ cdc cli changefeed create --pd=http://127.0.0.1:2379 --sink-uri=“kafka://127.0.0.1:9092/cdc-test” - 将变更数据输出为Canal格式
$ cdc cli changefeed create --pd=http://127.0.0.1:2379 --sink-uri=“kafka://127.0.0.1:9092/cdc-test?protocol=canal” - TiCDC对同步数据表的要求
确保上下游数据最终一致,数据表必须有主键或者唯一索引
如果表只存在唯一索引,至少有一个唯一索引的表结构中定义NOT NULL - TiCDC不支持的场景
使用Raw KV的TiKV集群
TiDB中的创建Sequence DDL操作和函数(上游使用Sequence EML操作可以正确同步)
TiKV 静默Region操作,TICDC会使Region无法进入静默状态
四、使用TICDC的环型同步功能
- 环形同步支持在多个TiDB间同步数据,及时三个TiDB同时写也会保证不会出现冗余数据
- 创建环形同步前准备工作(三个集群都执行)
- 创建环形同步
注意:DDL操作只能在集群A上执行,为了避免DDL操作环形同步,禁止了C将DDL同步至A操作
五、TiCDC的管理操作
- 支持暂停、恢复和删除同步任务
- 查看TiCDC同步任务的整体情况和状态
- Manage TiCDC Cluster and Replication Tasks(software-and-hardware)
- Scale out a TiCDC cluster
- TiCDC Deployment Topology
- Manage replication tasks (changefeed)
- TiCDC Open Protocol
- Manage TiCDC Cluster and Replication Tasks
- TiCDC Overview
- Troubleshoot TiCDC
- Manage TiCDC Cluster and Replication Tasks(cyclic)
- Manage TiCDC Cluster and Replication Tasks(pause-a-replication)
- Manage TiCDC Cluster and Replication Tasks(query-the-replication-task)