一、概述
TiCDC 是一款 TiDB 增量数据同步工具,通过拉取上游 TiKV 的数据变更日志,TiCDC可以将数据解析为有序的行级变更数据输出到下游。
详细的介绍可以看
官方文档:https://docs.pingcap.com/zh/tidb/stable/ticdc-overview
二、安装与卸载
我这里之前已经安装的基本的tidb集群,安装/卸载ticdc也就是集群的扩容和缩容操作。
1. 扩容ticdc节点
①编写scale-out.yaml文件(我的理解,文件名可自定义)
# 这里扩容两个节点
cdc_servers:
- host: X.X.X.X
gc-ttl: 86400
data_dir: /data/deploy/install/data/cdc-8300
- host: X.X.X.X
gc-ttl: 86400
data_dir: /data/deploy/install/data/cdc-8300
XXX.yaml文件中
host为节点ip
gc-ttl为gc大小 86400为默认值
data_dir为ticdc的路径
②运行扩容命令
tiup cluster scale-out <cluster-name> XXX.yaml
注意:建议新增节点和集群节点之间设置为为免密通信(ssh)状态
③查看集群状态
tiup cluster display <cluster-name>
如图扩容成功
2. 缩容ticdc节点
缩容运行命令
tiup cluster scale-in <cluster-name> --node X.X.X.X:8300
查看集群状态,ticdc节点不存在
三、同步到下游的mysql
1. 创建增量同步的配置XXX.toml文件,进行参数配置
# 指定配置文件中涉及的库名、表名是否为大小写敏感
#
# 该配置会同时影响 filter 和 sink 相关配置,默认为 true
#
case-sensitive = true
#
# 是否输出 old value,从 v4.0.5 开始支持
#
enable-old-value = true
#
#是否同步没有有效索引的表
#对于没有有效索引的表,INSERT 和 REPLACE 等操作不具备可重入性,因此会有数据冗余的风险。TiCDC 在同步过程中只保证数据至>少分发一次,因此开启该特性同步没有有效索引的表,一定会导致数据冗余出现。如果不能接受数据冗余,建议增加有效索引,譬如增加具有 AUTO RANDOM 属性的主键列。
force-replicate = true
#
[filter]
# 过滤器规则
# 过滤规则语法:https://docs.pingcap.com/zh/tidb/stable/table-filter#表库过滤语法
# 根据需要指定库和表
rules = ['*.*']
#
[mounter]
# mounter 线程数,用于解码 TiKV 输出的数据
#
worker-num = 16
#
[sink]
# 对于 MQ 类的 Sink,可以通过 dispatchers 配置 event 分发器
# 支持 default、ts、rowid、table 四种分发器,分发规则如下:
#
# - default:有多个唯一索引(包括主键)时按照 table 模式分发;只有一个唯一索引(或主键)按照 rowid 模式分发;如果开启了 old value 特性,按照 table 分发
#
# # - ts:以行变更的 commitTs 做 Hash 计算并进行 event 分发
#
# # - rowid:以所选的 HandleKey 列名和列值做 Hash 计算并进行 event 分发
#
# # - table:以表的 schema 名和 table 名做 Hash 计算并进行 event 分发
#
# # matcher 的匹配语法和过滤器规则语法相同
#
# # dispatchers = [
#
# # {matcher = ['test1.*', 'test2.*'], dispatcher = "ts"},
#
# # {matcher = ['test3.*', 'test4.*'], dispatcher = "rowid"},
#
# # ]
#
# # 对于 MQ 类的 Sink,可以指定消息的协议格式
#
# # 目前支持 default、canal、avro 和 maxwell 四种协议。default 为 TiCDC Open Protocol
protocol = "default"
#
[cyclic-replication]
# 是否开启环形同步
#
enable = false
#
# # 当前 TiCDC 的复制 ID
#
replica-id = 1
#
# 需要过滤掉的同步 ID
#
filter-replica-ids = [2,3]
#
# 是否同步 DDL
#
sync-ddl = true
2. 运行创建同步任务的命令
./tiup ctl:v5.3.0 cdc changefeed create --pd=http://X.X.X.X:2379 --sink-uri="mysql://root:root@X.X.X.X:3306/" --config ./XXX/XXX.toml --changefeed-id="task1" --sort-engine="unified"
或者
./cdc cli changefeed create --pd=http://X.X.X.X:2379 --sink-uri="mysql://root:root@X.X.X.X:3306/" --config ./XXX/XXX.toml --changefeed-id="task1" --sort-engine="unified"
3. 查询同步任务
查询任务列表:./cdc cli changefeed list --pd=http://主机名:2379
查询下指定任务:./cdc cli changefeed query -s --pd=http://srv190:2379 --changefeed-id="任务名称"
如图
四、同步到下游的kafka
1. 根据同步到mysql的文件进行配置
本篇第三节的第1小节
2. 运行创建任务的命令
./tiup ctl:v5.3.0 cdc changefeed create --pd=http://srv190:2379 --sink-uri='kafka://X.X.X.X:9092/tidb_cdc?kafka-version=2.6.0&partition-num=1&max-message-bytes=67108864&replication-factor=1&protocol=canal-json' --config /XXX/cdc.toml --changefeed-id="kafka-task1"
或者
./cdc cli changefeed create --pd=http://srv190:2379 --sink-uri='kafka://X.X.X.X:9092/tidb_cdc?kafka-version=2.6.0&partition-num=1&max-message-bytes=67108864&replication-factor=1&protocol=canal-json' --config /XXX/cdc.toml --changefeed-id="kafka-task1"
3.查看同步任务
查询任务列表:./cdc cli changefeed list --pd=http://主机名:2379
如图
4. kafka-eagle查看同步日志
如果没有kafka-eagle,可以参考kafka-eagle部署相关文章: