【问题标题】:count() query on ClickHouse replication关于 ClickHouse 复制的 count() 查询
【发布时间】:2021-12-05 18:02:31
【问题描述】:

你好 ClickHouse 期望,

我正在测试没有 zookeeper 的 ClickHouse 复制,以了解它的工作原理并有 2 个问题。

我是如何测试的:

  • 在不同的 VM 上设置 3 clickhouse-server(CH1、CH2、CH3)(21.9.4 修订版 54449)
  • 拥有一个使用这 3 台服务器的集群(请参阅下面的配置)
  • 有一个 MergeTree (log_local) 和一个分布式 (log_all) 表
  • 通过log_all向一台服务器(CH1)发送100M日志;使用位于不同 VM 中的 clickhouse-client

(Q1) 插入后,我从所有 3 台服务器查询 log_local 的 count(),总数符合预期(即 200M)。但是,当我使用 log_all 查询时,服务器之间的结果是不同的(接近 200M 但不准确)。更奇怪的是,即使在同一台服务器内,计数也会发生变化。你能解释一下这种行为吗?会不会是配置问题?没有副本 (3shards_1replica) 测试,我看不到这个计数差异。

我认为这不是推荐的,所以最终我会使用集群协调器 - 希望届时 clickhouse-keeper 能够投入生产。在那个阶段之前,我正在评估是否可以将其用作具有可解释缺点的临时解决方案。

(Q2)这更像是一个关于复制的通用问题。 log_all 的计数是 200M,其中包括副本。我在没有副本的情况下查询它的实用方法是什么?即,从 log_all(或其他名称)中选择 count() 会产生 100M 而不是 200M。

配置(为了不显示私人信息,我已经修改了一些原始名称):

    # remote_servers
    <log_3shards_2replicas>
     <shard>
         <replica>
             <host>CH1</host>
             <port>9000</port>
         </replica>
         <replica>
             <host>CH2</host>
             <port>9000</port>
         </replica>
     </shard>
     <shard>
         <replica>
             <host>CH2</host>
             <port>9000</port>
         </replica>
         <replica>
             <host>CH3</host>
             <port>9000</port>
         </replica>
     </shard>
     <shard>
         <replica>
             <host>CH3</host>
             <port>9000</port>
         </replica>
         <replica>
             <host>CH1</host>
             <port>9000</port>
         </replica>
     </shard>
    </log_3shards_2replicas>

    ENGINE = MergeTree
    PARTITION BY toYYYYMMDD(my_time)
    ORDER BY my_time
    SETTINGS index_granularity = 8192

    ENGINE = Distributed(‘log_3shards_2replicas', ‘my_db’, ‘log_local', rand()) 

一些参考资料:

  • https://github.com/ClickHouse/ClickHouse/issues/2161 fillimonov 评论道:“实际上,您可以在没有 Zookeeper 和 ReplicatedMergeTree 的情况下创建复制,只需使用 MergeTree 上方的分布式表和 internal_replication=false 集群设置,但在这种情况下,无法保证所有副本都具有 100% 相同的数据,所以我宁愿不推荐这种情况。”

类似问题讨论:

提前致谢。

【问题讨论】:

  • 更新:根据 Denny 的信息,我使用 NxM 设置(2 个分片和 2 个副本)进行了测试,我的 2 个问题中的查询都正确产生了 100M。再次感谢丹尼。

标签: clickhouse


【解决方案1】:

您已配置“循环复制”。上帝帮助你。

此配置不受支持,也不包含在 CI 中的测试中。

循环复制很难配置,对于新手来说非常不明显。

循环复制提供了很多问题和调试难度。

很多查询会产生不正确的结果。

过去使用 circle-replication 的大多数用户都转移到了通常的设置 N shards * M replica 并且现在很开心。

https://kb.altinity.com/engines/

https://youtu.be/4DlQ6sVKQaA

在您的配置中缺少DEFAULT_DATABASE 属性,没有它,循环复制将无法工作。

【讨论】:

  • 感谢丹尼的洞察力。当然,我不想与有问题的配置作斗争。将对 N*M 设置进行调查。
猜你喜欢
  • 2020-07-18
  • 2018-12-20
  • 2019-05-16
  • 1970-01-01
  • 1970-01-01
  • 2014-02-11
  • 2020-03-23
  • 2011-05-31
  • 1970-01-01
相关资源
最近更新 更多