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