TiCDC 新架构 v9.0.0 使用实践
作者: Well 原文来源:https://tidb.net/blog/c3c30ddb
一.TiCDC 新老架构对比
1. 不变部分
三个模块基本没有改动:Puller(从 TiKV 拉取变更),Configs & Cli API(配置和用户操作 API),Sink(往下游系统写入数据的模块,比如 Kafka、MySQL 等)。这保证了新 CDC 与上下游之间有良好的兼容性,用户可以无感升级。
2. 改进部分
CDC 的所有内核内容都进行了重写,包括基本的抽象模型,线程模型,监控等等。
Changefeed 彼此独立各负责一个同步任务链条的上下游,变为一个控制内部服务活动的参数。原同步任务抽象为各个服务管理,便于扩展和代码演进。
消息处理由 Timer Driven 模式调整为 Event Driven 模式,从原先每 50ms 周期轮动变为事件(如 DDL、DML、changefeed 创建修改等)驱动模式,将减少同步时延、提升同步并发效率。
代码复杂度降低,对表变革依赖关系进行逻辑抽象化,统一交给 Maintainer 模块管理,依赖判断复杂度从 N x N 降为 N x 1。
二.TiDB 单机集群 v8.5.1 测试 TiCDC 新架构
1. 测试环境信息
源库: rocky9.5, TiDB Cluster V8.5.1 单机集群;目标库:MySQL5.7.40;
2. 测试 TiCDC 节点增加和扩容
2.1 在现有 TiDB v8.5.1 中增加一个 TiCDC 节点
第一次扩展一个节点,端口号 83000,配置文件如下:
执行添加 TiCDC 节点命令
执行命令后,第一个 CDC 节点添加完成;
2.2 升级 TiCDC 到 v9.0.0
下载最新的 TiCDC 版本的 binaryhttps://tiup-mirrors.pingcap.com/cdc-v9.0.0-alpha-nightly-linux-amd64.tar.gz
将新的 TiCDC binary patch 到集群中
升级完成后查看集群状态,TiCDC Role 变为 cdc (patched);
查看 TiCDC 版本
2.3 修改 TiCDC 配置并启用新架构
修改配置,添加如下内容
重新加载配置
查看配置已生效:
2.4 扩容 TiCDC 集群
扩展两个 TiCDC 节点,端口号分别为 8301,8302,配置文件如下:
执行扩容 TiCDC 节点命令
执行完成后,查看集群状态,可见后加两个 TiCDC 节点 Role 均为 cdc (patched)。

3. 同步测试
3.1 创建同步任务
创建 changefeed-id 为 cdc9rep1 的同步任务,将上游集群所有包含主键或者非空唯一索引的表同步到下游 mysql5.7.40 数据库;
3.2 查看同步任务
对于刚创建的同步任务进行查询,如下:
3.3 查询复制任务详细信息
3.4 验证同步情况
登录源端 (上游)TiDB 数据库,
登录目标端 (下游)MySQL 数据库,
查询,源端新建表 d315.t315 已同步到目标数据库中,说明 TiCDC 同步正常。
三. 测试过程踩坑总结
1 TiCDC 新架构 v9.0.0 panic 且无法启动 – 疑似 Bug
该问题为:大批量数据同步引发 TiCDC panic,等待官方修复 bug 中。具体参见:TiCDC 新架构 v9.0.0 panic 且无法启动
2 Dasboard 不显示 TiCDC 信息 – 疑似 Bug
该问题为,启用 TiCDC 新架构参数后,在 Dashboard 中无法查看 TiCDC 信息,等待官方修复中。具体参见:Dasboard 不显示 TiCDC 信息 .
3 单机集群 reload 配置很慢 – 疑似兼容问题
该问题为:Centos7.9 部署 TiDB v8.5.1 单机集群,启动和加载配置操作很慢。重新在 Rocky9.5 中部署 TiDB v8.5.1 单机集群解决。怀疑为操作系统 Centos7.9 不兼容导致。
具体参见:单机集群 reload 配置很慢
.
4 建议:TiCDC 日志中增加记录– 同步范围和没有正常同步的表信息
增加日志丰富度,方便运维检测,排查故障
具体参见:TiCDC 日志中增加记录– 同步范围和没有正常同步的表信息
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/de59dd216fcb88d2d92d99d91】。文章转载请联系作者。
评论