TiDB CDC v6.5.0 新特性实践
作者: 数据小黑原文来源:https://tidb.net/blog/c272ee50
背景
在最近的 v6.5.0 发布的新特性中(详见:release-6.5.0),我对一个特性特别感兴趣:从 v6.5.0 开始,TiCDC 支持将行变更事件保存至存储服务,如 Amazon S3、Azure Blob Storage 和 NFS。参考:使用指南简言之,这个特性能够通过 TiCDC 这一个组件,就能保存 CDC 日志到对象存储中。如果应用这个特性,我就没有必要部署 Kafka 集群了,简化了部署要求,降低了部署成本。本文依托部署在 K8s 中的 TiDB ,测试 CDC 的新特性,OSS 采用 MinIO。
环境准备
TiDB 在 k8s 上的部署详见:快速上手 TiDB Operator,部署个测试集群即可,官方文档已经很详细了,可以参考我的 tidb-cluster.yml 如下:
部署后集群状态如下:
部署过程中,有点小波折,关于 6.5.0 版本中 TiDB-Dashboard 依赖包版本太高的问题,我最终采用了社区大佬的镜像,替换了官方镜像完成了部署。替换步骤为,修改官方的 tidb-dashboard.yml:
修改完成后,执行:
即可完成更新。
MinIO 的在 k8s 上的部署详见:kubernetes 部署 minio 对象存储
配置 CDC 任务
官方参考文档:https://docs.pingcap.com/zh/tidb/stable/ticdc-sink-to-cloud-storage我的目前是配置 TiCDC,同步 TiDB 的数据到同一个 k8s 集群的 MinIO 中,我配置中的地址都采用了 Service 地址。我的配置如下:
各参数说明:
server=http://basic-ticdc-peer:8301ticdc 的服务地址
sink-uri=…目标对象存储的配置
s3://tidbbinlog/TiCDC 支持的对象存储包含 s3 协议,MinIO 支持 s3 协议,此处采用 s3 协议,tidbbinlog 为 bucket 名称
protocol=canal-json 存储到对象存储中内容的格式,v6.5.0 支持 CSV 和 Canal-JSON 格式,我惯用 canal-json
endpoint=http://minio-headless.minio:9000对象存储访问地址
access-key=XXX 对象存储访问 access-key
secret-access-key=XXX 对象存储访问 secret-access-key
force-path-style=true 采用路径访问的方式访问对象存储,访问 MinIO 必须设置
changefeed-id=“oss-replication-task”CDC 的任务 ID
在命令行执行:
进入 pod 的命令行窗口,执行命令:
返回信息如下:
此时查询任务状态:
MinIO 上可以看到在对应的 bucket 下已经创建了一个文件:
文件内容为:
438588195559702535 为同步数据的 commit-ts,438588195559702535 之前的数据都已经同步到了 MinIO。
测试数据变更
测试非分区表
在 TiDB 中建表和插入数据:
检查 MinIO 并没有新的目录和文件产生,经检查日志:
查找原因是因为 test.student 表没有主键,建主键,并插入数据:
其中,CDC000001.json:
schema.json:
详细的内容解释,官方有文档说明,在此不再赘述。为表增加字段:
test/student 下面增加了一个目录,根据官方说明,这一层是表的版本,也就是说,如果对表执行 ddl,此处就会增加一个目录。
测试分区表
分区表建表并插入数据:
查看对象存储:
发现在默认情况下,分区表和非分区表存储结构是一致的,但分区表通常是因为数据量巨大,才分区的,在处理 cdc 日志时,通常也希望能按照分区处理。通过修改参数设置按照分区存储,执行:
在 config 里面写入:
其中:enable-partition-separator:开启按照分区分割目录 date-separator:按照分区分割目录的下层按天分割目录保存 config 文件,执行:
实际情况如下:
目录为 tidbbinlog-separator/test/student_partition/438627372744835072/86/2023-01-09/CDC000001.json 目录中,86 为分区的 ID,2023-01-09 为按时间分割的目录,这两种分区方式可以根据需要,分别使用和组合使用。
展望
我们在 Mysql 的 binlog 日志上,对于类似的处理方式已经有一些应用于生产,对于 json 格式的 cdc 日志,我们团队也有一些应用心得,有时间会写一篇文章补充介绍。
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/0b52098a8c8878f8fbff4fcb2】。文章转载请联系作者。
评论