ClickHouse分布式表格和insert_quorum

问题描述

我正在尝试配置具有分片和复制功能的群集,并且对insert_quorum如何与分布式引擎和内部复制一起工作有疑问。

insert_quorum控制向多个Replicated *表实例的同步插入(如果insert_quorum> = 2,则只有在将数据成功插入insert_quorum副本后,客户端才会返回)。

insert_distributed_sync控制向distributed表的同步插入。如果insert_distributed_sync = 1客户端将仅在成功将数据插入目标表后返回(如果internal_replication为true,则为一个副本)。

但是insert_distributed_sync,insert_quorum和internal_replication如何一起工作? 我的理解是否正确,如果我使用insert_distributed_sync = 1和insert_quorum = 2执行对分布式表的插入操作,则仅在将数据插入至少两个副本中后,语句才会返回? 还是为分布式引擎忽略了insert_quorum,并且仅在直接使用Replicated *表进行写操作时有效?

解决方法

据我了解

  • internal_replicationinsert_distributed_sync适用于分布式引擎
  • insert_quorum应用于ReplicatedMergeTree
对通过INSERT在多个Distributed上创建的*ReplicatedMergeTree表进行

insert_distributed_sync=1查询,将在初始Clickhouse-server进程内部使用来自{ {1}}配置部分。

将根据您在创建remote_servers表时定义的分片键为每个分片插入一个插入。

如果您定义internal_replication = true,则只应写入一个* ReplicatedMergeTree表,但是当分布式引擎插入ReplicatedMergeTree时,初始的Clickhouse-server充当查询的客户端,因此Distributed应该应用于目标{{ 1}},只有在所有插入的部件都将通过ZK复制之后,初始服务器才能得到答案。

如果您定义internal_replication = false,则insert_quorum引擎应启动对所有* ReplicatedMergeTree的插入,并且clickhouse-server也将适用,但是复制冲突应在{{1 }},导致插入的零件具有相同的控制总和和名称。