Clickhouse源码分析复制表数据的同步原理

网友投稿 972 2022-05-29

代码基于21.3.4.25-lts版本,本文以复制表insert的流程为例,讲述在一个副本中插入数据,是怎么将数据同步到另外一个副本。

Clickhouse源码分析:复制表数据的同步原理

# 复制表的创建,这里主要创建几个重要的监控线程 StorageReplicatedMergeTree::StorageReplicatedMergeTree queue // 表的队列,保存了需要处理的操作 restarting_thread // 重连zk的线程,保证能够一直连接zk ReplicatedMergeTreeRestartingThread::run queue_updating_task // 队列更新任务,监控zk上的log,将它们加载到queue中 mutations_updating_task // mutation更新任务,监控zk上的mutations节点 merge_selecting_task // 选择part进行merge或者mutate的任务 background_executor // 后台处理队列的线程 # 数据的写入 InterpreterFactory::get InterpreterInsertQuery::execute StorageReplicatedMergeTree::write ReplicatedMergeTreeBlockOutputStream ReplicatedMergeTreeBlockOutputStream::write writeTempPart // 数据写入本地磁盘 commitPart // 向zk提交插入的part信息 renameTempPartAndAdd // 临时目录变为正式目录 makeCreateRequest // 提交log_entry,zk上会创建log-xxx mergeSelectingTask // 主动触发merge任务 # 队列更新线程 queueUpdatingTask,也就是log entry的监控线程 ReplicatedMergeTreeQueue::pullLogsToQueue // 监控zk上是否有新的log产生 makeCreateRequest // 将log的内容放到zk上的/queue节点下 insertUnlocked // 在queue中新增当前entry # 队列任务处理进程 scheduling_task StorageReplicatedMergeTree::getDataProcessingJob selectQueueEntry queue.selectEntryToProcess // 从queue中选择可以执行的log entry processQueueEntry // 处理队列中的任务 processEntry executeLogEntry // 如果当前entry指定的part在本节点上,则return,否则从副本fetch executeFetch // 找到一个有该part的副本就可以 fetchPart fetcher.fetchPart // 通过http获取具体数据 removeProcessedEntry // 删除zk上的队列

ClickHouse

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:PyAutoGUI——图形用户界面自动化(超级详细)
下一篇:ubntu使用命令行进行目录操作
相关文章