TiCDC 源码阅读(二)TiKV CDC 模块介绍

本文介绍了TiKV中的CDC模块,包括其功能、数据流经的路径和如何确保事务完整性的过程。TiKV的CDC模块捕捉实时和历史数据变更,计算resolvedts以确保数据完整传输到TiCDC。文章详细阐述了数据从TiDB写入到TiKV,再到TiCDC的流程,以及事务完整捕捉的方法和resolvedts的角色。

内容概要

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

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

CDC 模块的代码分布

CDC 模块的代码在 TiKV 代码仓库的 compoenetns/cdccomponents/resolved_ts 模块。我们在下图中的黑框里面用红色标注了几个重点文件。

delegate.rs 文件中有个同名的 Delegate 结构体,它可以认为是 Region 在 CDC 模块中的“委派”,负责处理这个 region 的变更数据,包括实时的 raft 写入和历史增量数据。

endpoint.rs 文件中有个 Endpoint 结构体,它运行在 CDC 的主线程中,驱动整个 CDC 模块,上面的 delegate 也是运行在整个线程中的。

initializer.rs 文件中的 Initializer 结构体负责增量扫逻辑,同时也负责 delegate 的初始化,这里的增量扫就是读取保存在 rocksdb 中的历史数据变更。

service.rs 文件中的 Service 结构体,它实现了 ChagneData gRPC 服务,运行在 gRPC 的线程中,它负责 TiKV 和 TiCDC 的 RPC 交互,同时它和 Endpoint 中的 DelegateInitializer 也会有交互,主要是接受来自它俩的数据变更事件,然后把这些事件通过 RPC 发送给 TiCDC。

最后一个重要文件是 resolver.rs,它与上面的文件不太一样,在 resolve_ts 这个 component 中,里面的 Resolver 负责计算 resolved ts。

1.PNG

TiKV 如何输出数据变更事件流?

我们从端到端的角度完整地走一遍数据的写入和流出。下图概括了数据的流动,我们以数据保存到磁盘为界,红色箭头代表数据从 TiDB 写入 TiKV 磁盘的方向,蓝色箭头代表数据从 TiKV 磁盘流出到 TiCDC 的方向。</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值