TiDB从0到1系列
TiDB-从0到1-体系结构
TiDB-从0到1-分布式存储
TiDB-从0到1-分布式事务
TiDB-从0到1-MVCC
TiDB-从0到1-部署篇
TiDB-从0到1-配置篇
TiDB-从0到1-集群扩缩容
TiDB-从0到1-数据导出导入
TiDB-从0到1-BR工具
TiDB-从0到1-sync-diff-inspector数据校验工具
TiDB-从0到1-DM工具
TiDB-从0到1-TiCDC数据同步工具
一、TiCDC简介
每每介绍TiDB的组件都不得不感叹一下其强大的整体功能性。当使用MySQL还需要在下游挂canal时,TiDB则可以使用与其更适配的原生TiCDC。TiCDC 是一款 TiDB 增量数据同步工具,通过拉取上游 TiKV 的数据变更日志,TiCDC 可以将数据解析为有序的行级变更数据输出到下游。
TiCDC目前支持直接将TiDB数据同步至MySQL\TiDB\Kafka等
(整体架构图)
二、TiCDC原理
- TiCDC是直接读取TiKV的change log,而不是读binlog,所以性能极高
- 与DM Worker的工作逻辑不同,TiCDC中的各个节点将监测到各个TiKV节点的change log并统一传递到TiCDC的owner节点,由owner节点进行数据整合后再传输至下游组件
三、TiCDC使用限制
1、TiCDC只能同步至少存在一个有效索引的表
- 主键为有效索引
- 唯一索引中每一列在表结构中明确定义非空(NOT NULL)
- 唯一索引中不存在虚拟生成列(VIRTUAL GENERATED COLUMNS)
2、TiCDC不支持的场景
- 不支持单独同步某个TiKV,必须是TiKV集群
- 不支持在TiDB中创建SEQUENCE的DDL操作和SEQUENCE函数
四、TiCDC部署
1、同TiDB集群一起部署
#在TiDB集群启动配置文件中加入cdc节点内容
cdc_servers:
- host: xx.xxx.xx.xx
port:8300
deploy_dir: "/tidb-deploy/cdc-8300"
data_dir: "/tidb-data/cdc-8300"
log_dir: “/tidb-deploy/cdc-8300/log”
- host: xx.xxx.xx.xx
port:8300
deploy_dir: "/tidb-deploy/cdc-8300"
data_dir: "/tidb-data/cdc-8300"
log_dir: “/tidb-deploy/cdc-8300/log”
- host: xx.xxx.xx.xx
port:8300
deploy_dir: "/tidb-deploy/cdc-8300"
data_dir: "/tidb-data/cdc-8300"
log_dir: “/tidb-deploy/cdc-8300/log”
2、扩容部署
#当已有的TiDB集群已经运行了一段时间后,可以通过扩容的方式将CDC加入TiDB集群
#准备扩容文件
cdc_servers:
-host: xx.xxx.xx
gc-ttl:86400
data_dir: /data/deploy/install/data/cdc-8300
-host: xx.xxx.xx.x
gc-ttl:86400
data_dir: /data/deploy/install/data/cdc-8300
-host: xx.xxx.xx.x
gc-ttl:86400
data_dir: /data/deploy/install/data/cdc-8300
#执行扩容命令
tiup cluster scale-out tidb_test scale-out-ticdc.yml
#查看CDC节点
tiup cdc cli capture list --pd=http://xxx.xxx.xxx.xxx:2379
五、使用TiCDC
1、使用TiCDC创建同步任务(实例为同步数据至MySQL)
cdc cli changefeed create --pd=http://xx.xxx.xx.xx:2379 --sink-uri="mysql://root:xxx@127.0.0.1:3306/"
--changefeed-id="replication-task-1"
--sort-engine="unified"
常用参数:
- –changefeed-id:同步任务的ID
- –sink-uri:同步任务下游的地址
- –start-ts:开始同步上游的时间戳
- –target-ts:下游截止的时间戳
- –config:执行配置文件目录
- –sort-engine:
#数据汇总在哪里完成
memory:在内存
file:在磁盘
unified:优先在内存,内存不够在磁盘
2、查看有哪些TiCDC同步任务
tiup cdc cli changefeed list --pd=http://xxx.xxx.xx.xx:2379
3、查看同步任务状态
tiup cdc cli changefeed query --pd=http://xx.xx.xxx.xx:2379 --changefeed-id=replication-task-1
4、停止同步任务
tiup cdc cli changefeed pause --pd=http://xxx.xxx.xxx.xx:2379 --changefeed-id=replication-task-1
5、恢复同步任务
tiup cdc cli changefeed resume --pd=http://xxx.xxx.xxx.xx:2379 --changefeed-id=replication-task-1
6、删除同步任务
tiup cdc cli changefeed remove --pd=http://xxx.xxx.xxx.xx:2379 --changefeed-id=replication-task-1
7、TiCDC任务状态
彩蛋
基于TiCDC的可玩性就可以适用于多类场景
- TiDB集群的容灾
- MySQL迁到TiDB后,再用TiCDC实时同步数据回MySQL,为回滚做准备
- 实现原MySQL上canal+kafka的功能,以应对更多业务场景