版本:v7.1.0
问题:启用cdc同步到下游mysql,想统计这个过程中产生的变更日志(KV change logs)的大小。
细分问题1:如果只启动cdc,但是不创建changefeed,变更日志(增量同步数据)在哪里?是在内存里嘛,我在cdc/data中没有找到对应的持久化文件。
细分问题2:启动了cdc,也创建了changefeed。在tidb中所做的操作,确实可以同步到下游mysql中。此时查看cdc/data,可以找到相应的数据文件。发现在cdc/data/tmp/sorter目录下有8个文件夹:0000~0007,请问这些目录代表了什么意思?而且我发现只有0、2、4、6存储在增大,另外4个不变,这是为什么?为什么只有sorter目录,没有puller、mounter等等?
细分问题3:如果我想统计在某段时间内产生的变更日志大小,我在 prometheus上找到了一个metric:ticdc_sorter_db_write_bytes_sum,请问这个值可以表示当前已经生成的变更日志量吗?
细分问题1:如果只启动 CDC,但是不创建 changefeed,变更日志(增量同步数据)是存储在内存中的。CDC 会将变更数据缓存在内存中,等待下游的同步任务拉取。如果您想要持久化存储变更数据,需要创建 changefeed 并将数据同步到下游。
细分问题2:启动了 CDC 并创建了 changefeed 后,CDC 会将变更数据写入到 sorter 目录下的临时文件中。sorter 目录下的 0000~0007 文件夹代表了不同的 sorter worker,每个 worker 会将变更数据写入到对应的文件夹中。sorter 目录下的文件夹数量取决于 sorter worker 的数量,可以通过配置文件中的 sorter.workers 参数来控制。sorter 目录下的文件夹中的文件是临时文件,用于存储变更数据,当数据写入完成后会被删除。sorter 目录下的文件夹中的文件数量和大小会随着变更数据的增加而增加,当达到一定的阈值后,CDC 会将这些文件合并成一个较大的文件,并将其发送给下游的同步任务。sorter 目录下只有 sorter 相关的文件夹,因为 CDC 的其他组件(如 puller、mounter)不需要在本地存储数据。
细分问题3:ticdc_sorter_db_write_bytes_sum 这个 metric 表示的是 sorter 写入数据的总大小,包括已经写入到临时文件中的数据和正在写入的数据。如果您想要统计某段时间内产生的变更日志大小,可以使用该 metric,并结合 Prometheus 的查询语言进行查询。例如,如果您想要查询过去一小时内写入的数据大小,可以使用以下查询语句:
sum(rate(ticdc_sorter_db_write_bytes_sum[1h]))
该查询语句会返回过去一小时内写入的数据总大小。
1 个赞
非常感谢,回答的很精彩,解决了我很多困惑。同时我这里还有一些小小的疑惑,ticdc_sorter_db_write_bytes_sum计算的是从tikv到ticdc的变更日志,但并非最终由cdc发送给下游如mysql的数据,如果我想统计的是由cdc发送给下游mysql的那部分日志,应该怎么做?
(ps:可能跟输出数据协议有关,我这里是用tiup playground --ticdc 1部署的,changefeed是用cdc cli changefeed create --server=http://ip:8300 --sink-uri=“mysql://root:xxxxxx@127.0.0.1:3306” --changefeed-id="simple-replication-task"创建的,在没有指定protocol的情况下,使用的是哪种输出协议呢?)
system
(system)
关闭
6
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。