【问题标题】:Can't get data from Kafka to distributed table无法从 Kafka 获取数据到分布式表
【发布时间】:2019-07-17 15:08:26
【问题描述】:

我需要从 Kafka 队列(用我的脚本填充它)获取数据到 ClickHouse (CH) 集群中的每个副本。

我已经创建了:

  1. 每个副本上的“队列”表(Kafka 引擎);
  2. 每个副本上的“消费者”物化视图(从“队列”获取数据到分布式表);
  3. 'data'分布式表;

当我将数据放入 Kafka 时,我很确定表接受数据(简单的 select count(*) from data),但我总是得到这个:

“进度:1.55 万行,1.24 MB(297.46 行/秒,237.18 KB/秒。) 从服务器收到异常(版本 18.14.17):代码:159。 DB::Exception:从主机:端口接收。 DB::Exception: 申请失败 消费者: 。集合中的 0 行。经过:5.313 秒。已处理 1.55 千行,1.24 MB(291.94 行/秒,232.78 KB/秒)"

当我停止填写 Kafka 时,我有一个很短的时间窗口可以完成我的查询。但几秒钟后,我收到 - 我创建的每个表的计数为 0。

【问题讨论】:

    标签: java apache-kafka clickhouse


    【解决方案1】:

    问题就在我这边:物化视图“消费者”中的列无效。 顺便说一句,如果有人需要做同样的任务,这里的数据地图:

    1. 在集群中的所有主机上创建“本地”表;
    2. 在集群中的所有主机上创建分布式表;
    3. 在一台主机上创建 Kafka 引擎表“队列”+物化视图“消费者”

    【讨论】:

      【解决方案2】:

      虽然 Keyzj 共享的方法有效并且在您想要使用分布式表来控制分片时很有用,但还有另一种方法可以提高吞吐量和可靠性。

      您可以在集群中的所有机器上创建 Kafka 表,并为每个主机上的本地表提供单独的物化视图。只要在 Kafka 表定义中使用相同的消费者组名称,Kafka 内部将确保每个主机都从唯一的分区消费。您必须确保 Kafka 分区的数量是主机数量的 2-3 倍。例如,如果您的集群中有 4 台主机,则每台主机的设置方式如下:

      • num_consumers = 1 的 Kafka 表
      • 本地合并树表
      • 从 Kafka 表提供本地表的物化视图

      如果这种方法无法为您提供所需的吞吐量,您可以在同一主机上引入额外的 Kafka 表和物化视图。关键是始终使用相同的消费者组名称。

      【讨论】:

        猜你喜欢
        • 2019-06-18
        • 2018-06-12
        • 2015-11-05
        • 2013-03-20
        • 2019-12-20
        • 1970-01-01
        • 2016-02-13
        • 1970-01-01
        • 2021-03-18
        相关资源
        最近更新 更多