⬆️PingCAP DevCon 2022 视频回放及演讲资料已上线
点击上方图片查看相关内容~
TiCDC 是一款 TiDB 增量数据同步工具,通过拉取上游 TiKV 的数据变更日志,TiCDC 可以将数据解析为有序的行级变更数据输出到下游。
基于从源码层面来讲解 TiCDC 的基本原理,帮助读者深入地了解 TiCDC 的目的,本文将为大家介绍四篇TiCDC 源码阅读系列文章。
TiCDC 源码阅读(一)TiCDC 架构概览
本篇文章是这一系列文章的第一期,主要叙述了 TiCDC 的目的、架构和数据同步链路,旨在让读者能够初步了解 TiCDC,为阅读其他源码阅读文章起到一个引子的作用。
TiCDC 是什么?
TiCDC 是 TiDB 生态中的一个数据同步工具,它能够将上游 TiDB 集群中产生的增量数据实时地同步到下游目的地。除了可以将 TiDB 的数据同步至 MySQL 兼容的数据库之外,还提供了同步至 Kafka 和 S3 的能力,支持 Canal 和 Avro 等多种开放消息协议供其他系统订阅数据变更。

上图描述了 TiCDC 在整个 TiDB 生态系统中的位置,它处于一个上游 TiDB 集群和下游其它数据系统的中间,充当了一个数据传输管道的角色。
TiCDC 典型的应用场景为搭建多套 TiDB 集群间的主从复制,或者配合其他异构的系统搭建数据集成服务。以下将从这两方面为大家介绍:

主从复制

点击查看全文
TiCDC 源码阅读(二)TiKV CDC 模块介绍
本文是 TiCDC 源码解读的第二篇,将于大家介绍 TiCDC 的重要组成部分,TiKV 中的 CDC 模块。我们会围绕 4 个问题和 2 个目标展开。
1. TiKV 中的 CDC 模块是什么?
2. TiKV 如何输出数据变更事件流?
3. 数据变更事件有哪些?
4. 如何确保完整地捕捉分布式事务的数据变更事件?
希望在回答完这4个问题之后,大家能:
🔔 了解数据从 TiDB 写入到 TiKV CDC 模块输出的流程。
🗝️ 了解如何完整地捕捉分布式事务的数据变更事件。
在下面的内容中,我们在和这两个目标相关的地方会标记上 🔔 和 🗝️,以便提醒读者留意自己感兴趣的地方。
TiKV 中的 CDC 模块是什么?

CDC 模块的形态
从代码上看,CDC 模块是 TiKV 源码的一部分,它是用 rust 写的,在 TiKV 代码库里面;从运行时上看,CDC 模块运行在 TiKV 进程中,是一个线程,专门处理 TiCDC 的请求和数据变更的捕捉。

CDC 模块的作用
CDC 模块的作用有两个:
1. 它负责捕捉实时写入和读取历史数据变更。这里提一下历史数据变更指已经写到 RocksDB 里面的变更。
2. 它还负责计算 resolved ts。这个 resolved ts 是 CDC 模块里面特有的概念,形式上是一个 uint64 的 timestamp。它是 TiKV 事务变更流中的 perfect watermark,perfect watermark 的详细概念参考《Streaming System》的第三章,我们可以用 resolved ts 来告知下游,也就是 TiCDC,在 tikv 上所有 commit ts 小于 resolved ts 事务都已经完整发送了,下游 TiCDC 可以完整地处理这批事务了。
点击查看全文
TiCDC 源码阅读(三)TiCDC 集群工作过程解析
本文是 TiCDC 源码解读的第三篇,主要内容是讲述 TiCDC 集群的启动及基本工作过程,将从如下几个方面展开:
1. TiCDC Server 启动过程,以及 Server Capture Owner Processor Manager 概念和关系
2. TiCDC Changefeed 创建过程
3. Etcd 在 TiCDC 集群中的作用
4. Owner 和 Processor Manager 概念介绍,以及 Owner 选举和切换过程
5. Etcd Worker 在 TiCDC 中的作用
启动 TiCDC Server
启动一个 TiCDC Server 时,使用的命令如下,需要传入当前上游 TiDB 集群的 PD 地址。
cdc server --pd=http://127.0.0.1:2379
它会启动一个 TiCDC Server 运行实例,并且向 PD 的 ETCD Server 写入 TiCDC 相关的元数据,具体的 Key 如下:
/tidb/cdc/default/__cdc_meta__/capture/${capture_id}
/tidb/cdc/default/__cdc_meta__/owner/${session_id}
第一个 Key 是 Capture Key,用于注册一个 TiCDC Server 上运行的 Capture 信息,每次启动一个 Capture 时都会写入相应的 Key 和 Value。
第二个 Key 是 Campaign Key,每个 Capture 都会注册这样一个 Key 用于竞选 Owner。第一个写入 Owner Key 的 Capture 将成为 Owner 节点。
Server 启动,经过了解析 Server 启动参数,验证参数合法性,然后创建并且运行 TiCDC Server。Server 运行的过程中,会启动多个运行线程。首先启动一个 Http Server 线程,对外提供 Http OpenAPI 访问能力。其次,会创建一系列运行在 Server 级别的资源,主要作用是辅助 Capture 线程运行。最重要的是创建并且运行 Capture 线程,它是 TiCDC Server 运行的主要功能提供者。

点击查看全文





