0
1
1
0
专栏/.../

TiCDC 新架构 v9.0.0 使用实践

 Well  发表于  2025-03-17

一.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.yaml
cdc_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 版本的 binary https://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 version
Release Version: v9.0.0-alpha-143-gfe0e19a
Git Commit Hash: fe0e19ac8286a77e02b51707cbaa82a364f56e27
Git Branch: HEAD
UTC Build Time: 2025-03-11 01:51:50
Go Version: go1.23.7
Failpoint 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.yaml
cdc_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)。

image.png

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 -ptidb
mysql> create database d315;
mysql> use d315
mysql> create table t315(id int primary key);
mysql> insert into t315 values(1);
mysql> select count(*) from d315.t315\G;
*************************** 1. row ***************************
count(*): 1
1 row in set (0.00 sec)

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

# mysql -P3307 -uroot -pAbcd_1234
mysql> select count(*) from d315.t315\G
*************************** 1. row ***************************
count(*): 1
1 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日志中增加记录– 同步范围和没有正常同步的表信息 

0
1
1
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论