我需要从Kafka队列(用我的脚本填充)中获取数据到ClickHouse(CH)群集中的每个副本。
我创建了:
当我将数据放入Kafka时,我很确定表可以接受数据(简单的select count(*) from data
),但是我总是这样:
“进度:15.5万行,1.24 MB(297.46行/秒,237.18 KB /秒) 从服务器(版本18.14.17)接收到的异常:代码:159。 DB :: Exception:从host:port接收。 DB :: Exception:无法声明 消费者:。设置0行。耗时:5.313秒。已处理1.55 一千行,1.24 MB(291.94行/秒,232.78 KB /秒。)”
当我停止填充Kafka时,我会在很短的时间内完成查询。但是几秒钟后,我收到了-我创建的每个表都有0个计数。
答案 0 :(得分:2)
尽管Keyzj共享的方法行之有效,并且在您要使用分布式表控制分片时非常有用,但是还有另一种方法可以提高吞吐量和可靠性。
您可以在群集中的所有计算机上创建Kafka表,并使用单独的实例化视图为每个主机上的本地表提供数据。只要在Kafka表定义中使用相同的使用者组名称,Kafka内部成员就可以确保每个主机都使用唯一的分区。您必须确保Kafka分区的数量是主机数量的2-3倍。例如,如果您的群集中有4个主机,则每个主机的设置如下:
如果这种方法不能满足您的需求,则可以在同一主机上引入其他Kafka表和实例化视图。关键是在整个过程中使用相同的使用者组名称。
答案 1 :(得分:1)
问题就在我这边:物化视图“消费者”中的无效列。 顺便说一句,如果有人需要执行相同的任务,请参见以下数据图: