写点什么

TiCDC 新架构 v9.0.0 使用实践

作者: Well 原文来源:https://tidb.net/blog/c3c30ddb

一.TiCDC 新老架构对比

1. 不变部分

三个模块基本没有改动:Puller(从 TiKV 拉取变更),Configs & Cli API(配置和用户操作 API),Sink(往下游系统写入数据的模块,比如 Kafka、MySQL 等)。这保证了新 CDC 与上下游之间有良好的兼容性,用户可以无感升级。

2. 改进部分

CDC 的所有内核内容都进行了重写,包括基本的抽象模型,线程模型,监控等等。


  1. Changefeed 彼此独立各负责一个同步任务链条的上下游,变为一个控制内部服务活动的参数。原同步任务抽象为各个服务管理,便于扩展和代码演进。

  2. 消息处理由 Timer Driven 模式调整为 Event Driven 模式,从原先每 50ms 周期轮动变为事件(如 DDL、DML、changefeed 创建修改等)驱动模式,将减少同步时延、提升同步并发效率。

  3. 代码复杂度降低,对表变革依赖关系进行逻辑抽象化,统一交给 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,配置文件如下:


# cat ticdc-scaleout1.yamlcdc_servers:  - host: 192.168.169.41    gc-ttl: 86400    data_dir: /tidb-data/cdc-8300
复制代码


执行添加 TiCDC 节点命令


# tiup cluster scale-out tidb-test ticdc-scaleout1.yaml -p
复制代码


执行命令后,第一个 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 到集群中


# tiup cluster patch tidb-test ./cdc-v9.0.0-alpha-nightly-linux-amd64.tar.gz -R cdc --overwrite
复制代码


升级完成后查看集群状态,TiCDC Role 变为 cdc (patched);


查看 TiCDC 版本


# /tidb-deploy/cdc-8300/bin/cdc versionRelease Version: v9.0.0-alpha-143-gfe0e19aGit Commit Hash: fe0e19ac8286a77e02b51707cbaa82a364f56e27Git Branch: HEADUTC Build Time: 2025-03-11 01:51:50Go Version: go1.23.7Failpoint Build: false
复制代码

2.3 修改 TiCDC 配置并启用新架构

修改配置,添加如下内容


tiup cluster edit-config <cluster-name>#vim#cdc_servers:# ...# config:#    newarch: true
复制代码


重新加载配置


# tiup cluster reload tidb-test
复制代码


查看配置已生效:


# tiup cluster show-config tidb-test
复制代码

2.4 扩容 TiCDC 集群

扩展两个 TiCDC 节点,端口号分别为 8301,8302,配置文件如下:


# cat ticdc-scaleout2.yamlcdc_servers:  - host: 192.168.169.41    gc-ttl: 86400    port: 8301    data_dir: /tidb-data/cdc-8301  - host: 192.168.169.41    gc-ttl: 86400    port: 8302    data_dir: /tidb-data/cdc-8302
复制代码


执行扩容 TiCDC 节点命令


# tiup cluster scale-out tidb-test ticdc-scaleout2.yaml -p
复制代码


执行完成后,查看集群状态,可见后加两个 TiCDC 节点 Role 均为 cdc (patched)。


3. 同步测试

3.1 创建同步任务

创建 changefeed-id 为 cdc9rep1 的同步任务,将上游集群所有包含主键或者非空唯一索引的表同步到下游 mysql5.7.40 数据库;


# pwd/tidb-deploy/cdc-8300/bin
# ./cdc cli changefeed create --pd=http://192.168.169.40:2379 --sink-uri="mysql://root:Abcd_1234@192.168.169.121:3307/" --changefeed-id="cdc9rep1"
复制代码

3.2 查看同步任务

对于刚创建的同步任务进行查询,如下:


# pwd/tidb-deploy/cdc-8300/bin# cdc cli changefeed list --pd=http://192.168.169.40:2379[  {    "id": "cdc9rep1",    "namespace": "default",    "summary": {      "state": "normal",      "tso": 456665489618501650,      "checkpoint": "2025-03-15 20:09:54.553",      "error": null    }  }
复制代码

3.3 查询复制任务详细信息

# cdc cli changefeed query --pd=http://192.168.169.40:2379 --changefeed-id=cdc9rep1{  "upstream_id": 7481945022851484351,  "namespace": "default",  "id": "cdc9rep1",  "sink_uri": "mysql://root:xxxxx@192.168.169.121:3307/",  "config": {    "memory_quota": 1073741824,    "case_sensitive": false,    "force_replicate": false,    "ignore_ineligible_table": false,    "check_gc_safe_point": true,    "enable_sync_point": false,    "enable_table_monitor": false,    "bdr_mode": false,    "sync_point_interval": 600000000000,    "sync_point_retention": 86400000000000,    "filter": {      "rules": [        "*.*"      ]    },    "mounter": {      "worker_num": 16    },    "sink": {      "csv": {        "delimiter": ",",        "quote": "\"",        "null": "\\N",        "include_commit_ts": false,        "binary_encoding_method": "base64",        "output_old_value": false,        "output_handle_key": false      },      "encoder_concurrency": 32,      "terminator": "\r\n",      "date_separator": "day",      "enable_partition_separator": true,      "enable_kafka_sink_v2": false,      "only_output_updated_columns": false,      "delete_only_output_handle_key_columns": false,      "content_compatible": false,      "advance_timeout": 150,      "send_bootstrap_interval_in_sec": 120,      "send_bootstrap_in_msg_count": 10000,      "send_bootstrap_to_all_partition": true,      "send-all-bootstrap-at-start": false,      "debezium_disable_schema": false,      "debezium": {        "output_old_value": true      },      "open": {        "output_old_value": true      }    },    "consistent": {      "level": "none",      "max_log_size": 64,      "flush_interval": 2000,      "meta_flush_interval": 200,      "encoding_worker_num": 16,      "flush_worker_num": 8,      "use_file_backend": false,      "memory_usage": {        "memory_quota_percentage": 50      }    },    "scheduler": {      "enable_table_across_nodes": false,      "region_threshold": 100000,      "write_key_threshold": 0    },    "integrity": {      "integrity_check_level": "none",      "corruption_handle_level": "warn"    },    "changefeed_error_stuck_duration": 1800000000000,    "synced_status": {      "synced_check_interval": 300,      "checkpoint_interval": 15    }  },  "create_time": "2025-03-15 20:09:52.364",  "start_ts": 456665489028677648,  "resolved_ts": 456665500916908046,  "target_ts": 0,  "checkpoint_tso": 456665500916908046,  "checkpoint_time": "2025-03-15 20:10:37.653",  "state": "normal",  "creator_version": "v9.0.0-alpha-143-gfe0e19a"}
复制代码

3.4 验证同步情况

登录源端 (上游)TiDB 数据库,


# mysql -h192.168.169.40 -P4000 -uroot -ptidbmysql> create database d315;mysql> use d315mysql> create table t315(id int primary key);mysql> insert into t315 values(1);mysql> select count(*) from d315.t315\G;*************************** 1. row ***************************count(*): 11 row in set (0.00 sec)
复制代码


登录目标端 (下游)MySQL 数据库,


# mysql -P3307 -uroot -pAbcd_1234mysql> select count(*) from d315.t315\G*************************** 1. row ***************************count(*): 11 row in set (0.00 sec)
复制代码


查询,源端新建表 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 日志中增加记录– 同步范围和没有正常同步的表信息 


发布于: 刚刚阅读数: 1
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
TiCDC 新架构 v9.0.0 使用实践_TiCDC新架构_TiDB 社区干货传送门_InfoQ写作社区