1.14 Clickhouse

1.14 Clickhouse
1.14.1 Clickhouse的优势
快:提供了丰富的表引擎,每个表引擎 都做了尽可能的优化。
为什么快?
(1)向量化
(2)列式
(3)尽可能使用本节点的 内存+cpu
(4)提供了sql化的语言
(5)支持自定义函数
(6)提供了丰富的表引擎,引擎都经过了优化
1.14.2 Clickhouse的引擎
(1)Log 
(2)Special:Memory、Distributed
(3)MergeTree: replacingmergetree、summingmergetree
                replicatedmergetree
(4)集成引擎: 外部系统映射,如MySQL
1.14.3 Flink写入Clickhouse怎么保证一致性?
Clickhouse没有事务,Flink写入是至少一次语义。
利用Clickhouse的ReplacingMergeTree引擎会根据主键去重,但只能保证最终一致性。查询时加上final关键字可以保证查询结果的一致性。
1.14.4 Clickhouse存储多少数据?几张表?
10几张宽表,每天平均10来G,存储一年。
需要磁盘 10G * 365天 * 2副本/0.7 = 约11T
1.14.5 Clickhouse使用本地表还是分布式表
1)我们用的本地表,2个副本
2)分布式表写入存在的问题:
假如现有一个2分片的集群,使用clickhouse插入分布式表。
(1)资源消耗问题:在分片2的数据写入临时目录中会产生写放大现象,会大量消耗分片节点1的CPU和磁盘等资源。
(2)数据准确性和一致性问题:在写入分片2的时候,节点1或节点2的不正常都会导致数据问题。(节点1挂了数据丢失、节点2挂了或者节点2表删了节点1会无限制重试,占用资源)。
(3)part过多问题:每个节点每秒收到一个Insert Query,N个节点,分发N-1次,一共就是每秒生成Nx(N-1)个part目录。集群shard数越多,分发产生的小文件也会越多(如果写本地表就会相对集中些),最后会导致写入到MergeTree的Part的数会特别多,最后会拖垮整个文件的系统。
1.14.6 Clickhouse的物化视图
一种查询结果的持久化,记录了查询语句和对应的查询结果。
优点:查询速度快,要是把物化视图这些规则全部写好,它比原数据查询快了很多,总的行数少了,因为都预计算好了。
缺点:它的本质是一个流式数据的使用场景,是累加式的技术,所以要用历史数据做去重、去核这样的分析,在物化视图里面是不太好用的。在某些场景的使用也是有限的。而且如果一张表加了好多物化视图,在写这张表的时候,就会消耗很多机器的资源,比如数据带宽占满、存储一下子增加了很多。
1.14.7 Clickhouse连接ZK频繁超时解决办法
问题:副本表依赖Zookeeper,插入太频繁导致ZK中Clickhouse的znode part过多,导致ZK节点通信拥堵。
解决:
1)写入不要太快太频繁,攒批设置条数和时间写入
2)清理已有的znode,目前有2种方法:
(1)将部分离线表导出后drop,然后再导入
(2)大部分表的数据都有生命周期,N个月后将不再需要的历史分区直接drop
3)提高zk稳定性:
(1)增大ZK会话最大超时时间
(2)Zookeeper的Snapshot文件存储盘不低于1T,注意清理策略
(3)将dataLogDir存放目录应该与dataDir分开,可单独采用一套存储设备来存放ZK日志
(4)Clickhouse建表的时候添加use_minimalistic_part_header_in_zookeeper参数,对元数据进行压缩存储,但是修改完了以后无法再回滚
1.14.8 Clickhouse的优化
1)内存优化
max_memory_usage: 单个查询的内存上限,128G内存的服务器==》 设为100G
max_bytes_before_external_group_by:设为 一半,50G
max_bytes_before_external_sort:设为一半,50G
2)CPU
max_concurrent_queries: 默认 100/s ===> 300/s 
3)存储
SSD更快
4)物化视图
5)写入时攒批,避免写入过快导致 too many parts
1.14.9 Clickhouse的新特性Projection
Projection 意指一组列的组合,可以按照与原表不同的排序存储,并且支持聚合函数的查询。ClickHouse Projection 可以看做是一种更加智能的物化视图,它有如下特点:
1)part-level存储
相比普通物化视图是一张独立的表,Projection 物化的数据就保存在原表的分区目录中,支持明细数据的普通Projection 和 预聚合Projection。
2)无感使用,自动命中
可以对一张 MergeTree 创建多个 Projection ,当执行 Select 语句的时候,能根据查询范围,自动匹配最优的 Projection 提供查询加速。如果没有命中 Projection , 就直接查询底表。
3)数据同源、同生共死
因为物化的数据保存在原表的分区,所以数据的更新、合并都是同源的,也就不会出现不一致的情况了。
1.14.10 Cilckhouse的索引、底层存储
1)索引
(1)一级索引:稀疏索引(主键索引)   粒度8192
(2)二级索引:跳数索引  minmax、set、bloom_filter等
2)底层存储
Clickhouse默认数据目录在/var/lib/clickhouse/data目录中。所有的数据库都会在该目录中创建一个子文件夹。下图展示了Clickhouse对数据文件的组织。

202103_1_10_2    目录    分区目录,由分区+LSM生成的
detached    目录    通过DETACH语句卸载后的表分区存放位置
format_version.txt    文本文件    纯文本,记录存储的格式
分区目录命名 = 分区ID_最小数据块编号_最大数据块编号_层级构成。数据块编号从1开始自增,新创建的数据块最大和最小编号相同,当发生合并时会将其修改为合并的数据块编号。同时每次合并都会将层级增加1。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一鸣888

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值