暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【源码阅读】TiCDC - TiDB 增量数据同步工具解读(上)

TiDB Club 2023-03-02
373

⬆️PingCAP DevCon 2022 视频回放及演讲资料已上线

点击上方图片查看相关内容~

TiCDC 是一款 TiDB 增量数据同步工具,通过拉取上游 TiKV 的数据变更日志,TiCDC 可以将数据解析为有序的行级变更数据输出到下游。


基于从源码层面来讲解 TiCDC 的基本原理,帮助读者深入地了解 TiCDC 的目的,本文将为大家介绍四篇TiCDC 源码阅读系列文章。


01

TiCDC 源码阅读(一)TiCDC 架构概览

本篇文章是这一系列文章的第一期,主要叙述了 TiCDC 的目的、架构和数据同步链路,旨在让读者能够初步了解 TiCDC,为阅读其他源码阅读文章起到一个引子的作用。


TiCDC 是什么?


TiCDC 是 TiDB 生态中的一个数据同步工具,它能够将上游 TiDB 集群中产生的增量数据实时地同步到下游目的地。除了可以将 TiDB 的数据同步至 MySQL 兼容的数据库之外,还提供了同步至 Kafka 和 S3 的能力,支持 Canal 和 Avro 等多种开放消息协议供其他系统订阅数据变更。



上图描述了 TiCDC 在整个  TiDB 生态系统中的位置,它处于一个上游 TiDB 集群和下游其它数据系统的中间,充当了一个数据传输管道的角色。


TiCDC 典型的应用场景为搭建多套 TiDB 集群间的主从复制,或者配合其他异构的系统搭建数据集成服务。以下将从这两方面为大家介绍:


主从复制



点击查看全文


02

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 可以完整地处理这批事务了。

点击查看全文


03

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 运行的主要功能提供者。


点击查看全文

点击上图咨询 TiDB 企业版

文章转载自TiDB Club,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论