【问题标题】:ClickHouse Distributed tables and insert_quorumClickHouse 分布式表和 insert_quorum
【发布时间】:2021-01-05 06:26:32
【问题描述】:

我正在尝试配置一个同时具有分片和复制的集群,并且对 insert_quorum 如何与分布式引擎和内部复制一起使用有一些疑问。

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

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

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

【问题讨论】:

    标签: clickhouse


    【解决方案1】:

    据我了解

    • internal_replicationinsert_distributed_sync 适用于分布式引擎
    • insert_quorum 应用于 ReplicatedMergeTree

    INSERT 查询到 Distributed 表,该表在多个 *ReplicatedMergeTreeinsert_distributed_sync=1 上创建,将调用多个插入到 ReplicatedMergeTree 表中的初始 clickhouse-server 进程使用来自 remote_servers 配置部分的身份验证。

    根据你在创建Distributed表时定义的sharding key为每个Shard插入一个。

    如果定义 internal_replication=true,则只应写入一个 *ReplicatedMergeTree 表,但当分布式引擎插入 ReplicatedMergeTree 时,初始 clickhouse-server 作为客户端提供查询,因此 insert_quorum 应适用于目标 clickhouse-server 和只有在所有插入的部分都通过 ZK 复制后,初始服务器才会得到答案。

    如果你定义 internal_replication=false,那么 Distributed 引擎应该启动插入到所有 *ReplicatedMergeTree,insert_quorum 也将适用,但是复制冲突应该在 ReplicatedMergeTree 端的 Zookeeper 队列上解决,导致插入部分将具有相同的控制总和和名称。

    【讨论】:

      猜你喜欢
      • 2017-11-06
      • 2023-03-18
      • 2020-09-13
      • 2020-10-18
      • 2019-11-20
      • 2018-08-18
      • 2019-05-26
      • 2019-11-22
      • 2022-01-22
      相关资源
      最近更新 更多