TiCDC 通过拉取TiKV变更日志,实现TiDB增量数据同步工具,具有将数据还原到与上游任意时刻一致状态的能力;同时提供开放数据协议的能力,可以支持其他系统订阅数据变更;
TiCDC特性
- 高可用性: 可以多节点,互不干扰,如果某个节点故障,可以自动故障转移;
- 性能: 一般3s内;
- 支持丰富的下游格式: 兼容MySQL格式的任何DB;
TiCDC架构和原理
- TiDB接收SQL, TiKV的各个节点变更后,只输出自己本节点的修改日志给TiCDC Cluster集群
- TiCDC 节点负责接收到TiKV的日志,并在内部逻辑拼接在一起;
- 多个Capture组成一个集群,某个Capture负责拉取一部分TiKV日志,并与其他Capture协同,将收到的日志聚集到某个Capture Owner,进而发送给下游;
- 如果一个Capure故障,将会将owner自动转移到其他Capture,进而继续拼装所有的变更日志,输出到下游
TiCDC 适用场景
适合数据源(上游数据库)为TiCDC, 目标数据库(下游数据库)为类MySQL数据库和Kafka; 同时TiCDC Open Protocol是一种行级别的数据变更通知协议,可以为监控、缓存、全文索引、分析引擎、异构数据库的主从复制等提供数据源;
TiCDC配置要求
生产环境: 16c/64G/SSD/万兆网卡/>2节点/ >Centos 7.3
部署
安装tidb集群的时候如果没有安装,则可以通过scale-out的方式进行安装;
vim scale-out.yaml
cdc_servers:
- host: XX.XX.XX.XX
port: 8300
deploy_dir: "/export/servers/TiDB/ticdc-8300/"
log_dir: "/export/servers/TiDB/ticdc-8300/log"
- host: XX.XX.XX.XX
port: 8300
deploy_dir: "/export/servers/TiDB/ticdc-8300/"
log_dir: "/export/servers/TiDB/ticdc-8300/log"
扩容命令: tiup cluster scale-out cluster-default scale-out.yaml
cdc管理工具安装: tiup install cdc
版本查看
TiCDC]# tiup cdc version
Starting component `cdc`: /root/.tiup/components/cdc/v5.3.0/cdc version
Release Version: v5.3.0
Git Commit Hash: 20626babf21fc381d4364646c40dd84598533d66
Git Branch: heads/refs/tags/v5.3.0
UTC Build Time: 2021-11-22 10:37:02
Go Version: go version go1.16.4 linux/amd64
Failpoint Build: false
创建任务
tiup cdc cli changefeed create --pd=${pd_address}:2379 --sink-url="mysql://rooot@123456@127.0.0.1:3306" -changefeed-id="cdc-task1"
- --pd : 通过PD可以获取到TiKV的元数据信息;
- --sink-url :下游的数据库地址连接串
- --changefeed-id: 同步任务id,如果不指定,ticdc会自动生成一个UUID;
- --start-ts: 指定changefeed开始的TSO;省略则从执行时间开始;
- --target-ts: 指定目标TSO;指定后,截止到目标时间则停止同步; 省略则会一直同步;
其他相关参数
下游为MySQL/TiDB
worker-count: 下游执行的并发度
max-txn-row: 执行sql的batch大小
下游为Kafka
protocol: 输出到kafka消息协议,可选default、canal、 avro、 maxwell;
max-message-bytes: 每次向Kafka broker发送消息的最大数据量,默认64MB
任务查询
cdc cli changefeed list --pd=http://${pd_ip}:2379
可以指定多个PD节点
cdc cli changefeed query -s --pd=http://${pd}:2379 --changefeed-id=${task-name}
暂停/恢复/删除同步任务
cdc cli changefeed pause/resume/remove --pd=http://${pd}:2379 --changefeed-id=${task-name}
更新TiCDC同步任务配置
暂停 --> 修改配置 --> 恢复任务
cdc cli changefeed pause -C test-cf --pd=http://${pd}:2379
cdc cli changefeed update ...
cdc cli changefeed resume ..
.TiCDC 限制
- 有效索引:必须要有主键,或者非空/非虚拟生成列的唯一索引;
- 暂不支持单独使用RawKV的TiKV集群;
- 暂不支持 TiDB 中创建SEQUENCE的DDL操作和SEQUENCE函数
- 不支持TiKV Hibernate Region