摘要:在向ck集群写入数据的过程,有2种方案,一种是直接写本地表,一种是通过Distributed表引擎写分布式表。本文介绍写分布式表的核心流程。 先假定场景和统一命名: 我们假设有cluster1,和cluster2两个集群。 本地表log_local对应的分布式表为log_all。 假设请求A进来后请求到cluster1的分布式表log_all,要写入100条数据。
1)cluster1节点接收到请求后,会根据分片键/分片表达式计算这100条数据的分片划分,一部分应该到cluster1,一部分应该到cluster2。 2)将应该到cluster1分片的数据直接写入log_local。
1)cluster1将需要写入到远端的数据以分片为单位,写入cluster1节点的临时目录下。比如有2个分片,则写入2个目录。 2)cluster1节点尝试与远端cluster2节点建立连接;
cluster1会有监听任务,监听cluster1特定目录下的文件变化,将目录下的数据压缩后发送到对应的远端节点。
1)cluster2节点确认和cluster1节点建立连接,然后接受cluster1发送的数据。 2)将接收到的数据写入到本地表。
cluster1节点会确认数据发送完毕。
在Distributed表向远端节点发送数据时,有2种模式,可以通过配置项设置:
在当前分片本地写入完成后,会等待所有分片写入完毕,才会返回写入成功的消息。 同步写可以设置超时时间。
在当前分片本地写入完成后,即返回写入成功的消息。