介绍业务需要一个OLAP引擎,可以实现实时写入存储和查询计算功能,提供高效健壮的实时数据服务。最后,什么是ClickHouse?ClickHouse是一个用于在线分析(OLAP)的列式数据库管理系统(DBMS)。列式数据库更适合OLAP场景(对于大多数查询,处理速度至少提升了100倍),下面详细解释原因(图片更利于直观理解)。图片来自ClickHouse中文官方文档。在行格式和列格式上,我们用Flink写程序,在Kafka消费topic数据,清洗,归一化,写入clickhouse。这里的重点是因为第一次使用,无法区分clickhouse表应该创建什么格式,出现了一些问题。最大的问题是程序写入了数据,查询发现数据不全,只有一部分。也在网上查了一些原因,总结了一下。为什么有时看不到创建的表,查询结果波动越来越大?常见原因一:建表过程出现问题。ClickHouse的分布式集群构建没有原生的分布式DDL语义。如果在搭建自己的ClickHouse集群时使用createtable创建表,虽然查询返回成功,但实际的表只是在当前连接的Server上创建。下次连接到另一台服务器时,您将看不到该表。解决方法:建表时,请使用createtableonclusterdefault语句。onclusterdefault语句会将这条语句广播到default集群中的所有节点去执行。示例代码如下。在clusterdefault(aUInt64)Engine=MergeTree()orderbytuple()上创建表测试;在测试表上创建另一个分布式表引擎。建表语句如下。在集群default上创建表test_dis作为testEngine=Distributed(default,default,test,cityHash64(a));常见原因2:ReplicatedMergeTree存储表配置有问题。ReplicatedMergeTree表引擎是MergeTree表引擎对应的主备同步增强版。单副本实例只能创建MergeTree表引擎,双副本实例只能创建ReplicatedMergeTree表引擎。解决方法:在双副本实例上建表时,请使用ReplicatedMergeTree('/clickhouse/tables/{database}/{table}/{shard}','{replica}')或者ReplicatedMergeTree()配置ReplicatedMergeTree表引擎。其中ReplicatedMergeTree('/clickhouse/tables/{database}/{table}/{shard}','{replica}')是固定配置,不需要修改。这里介绍了复制表的概念。这里只有MergeTree系列的表可以支持副本:ReplicatedMergeTreeReplicatedSummingMergeTreeReplicatedReplacingMergeTreeReplicatedAggregatingMergeTreeReplicatedCollapsingMergeTreeReplicatedVersionedCollapsingMergeTreeReplicatedGraphiteMergeTree副本是表级别的,不是整个服务器级别的。因此,服务器中可以同时存在复制表和非复制表。副本不依赖于分片。每个分片都有自己独立的副本。创建复制表,首先要做准备工作,建表,然后写程序。在表引擎名称前加上Replicated。例如:ReplicatedMergeTree。先创建一个分布式数据库?