我正在尝试配置一个同时具有切分和复制的集群,并对insert_quorum如何与分布式引擎和内部复制一起工作有一些疑问。
insert_quorum控制复制*表的多个实例的同步插入(如果insert_quorum>=2只在数据成功插入insert_quorum副本之后才返回)。
insert_distributed_sync控制对分布式表的同步插入。如果insert_distributed_sync=1客户端仅在数据成功插入目标表后才返回(如果internal_replication为真,则一个副本)。
但insert_distributed_sync、insert_quorum和internal_replication是如何协同工作的呢?我的理解是,如果我使用insert_distributed_sync=1和insert_quorum=2执行insert到分布式表,语句只会在数据插入至少两个副本之后才返回吗?或者,对于分布式引擎,insert_quorum是否被忽略,并且仅在直接使用复制的*表编写时才能工作?
发布于 2020-09-19 15:26:18
据我所知
internal_replication和insert_distributed_sync适用于应用于ReplicatedMergeTree的分布式engine
insert_quorumINSERT对Distributed表的查询使用insert_distributed_sync=1在多个*ReplicatedMergeTree上创建,将在初始的clickhouse-服务器进程中调用多个插入到ReplicatedMergeTree表中的插入,使用来自remote_servers配置部分的身份验证。
它将根据您在创建Distributed表时定义的切分键为每个碎片插入一次。
如果您定义了internal_replication=true,那么应该只编写一个*ReplicatedMergeTree表,但是当分布式引擎插入到ReplicatedMergeTree中时,初始clickhouse服务器将查询作为客户端,因此insert_quorum应该应用于目标clickhouse-server,而初始服务器只有在所有插入的部分在ZK上复制之后才会得到答案。
如果您定义了internal_replication=false,那么Distributed引擎应该启动对所有*ReplicatedMergeTree的插入,并且insert_quorum也会应用,但是复制冲突应该在ReplicatedMergeTree侧的over Zookeeper队列上解决,因为插入的部分将具有相同的控制和名称。
https://stackoverflow.com/questions/63953644
复制相似问题