导航
在完成将公司日志数据从Elasticsearch(下称ES)转战到Clickhouse后,个人认为有必要将过程记录分享。限于篇幅及便于分类组织,我会以一个系列文章的形式记录:
- 01 《Elasticsearch vs Clickhouse》
- 02 《Clickhouse的基础知识扫盲》
- 03 《Clickhouse多分片多副本集群部署》
- 04 《Clickhouse表引擎选择和表结构设计》
- 05 《clickhouse高效数据处理工具vector》
- 06 《clickhouse的数据可视化工具clickvisual》
- 07 《kibana自定义插件跳转clickvisual》
- 08 《妙用clickvisual api实现用户自动管理》(敬请期待)
一、CLickhouse 是什么
ClickHouse是俄罗斯Yandex公司于2016年开发,是一个用于OLAP的列式数据库管理系统(DBMS)。
存储形式 |
优点 |
缺点 |
业界代表 |
行式 |
|
|
Mysql、sql server等 |
列式 |
|
|
Clickhouse、SAP HANA等 |
二、为什么选择CLickhouse
- 数据压缩
支持多种压缩算法,在磁盘空间和cpu的消耗之间达到相对平衡
- 顺序读写
通过预排序、定期合并排序,巧妙的转化为顺序读写,大大提升吞吐量和查询效率
- 多核心并行处理
ClickHouse会使用服务器上一切可用的资源,从而以最自然的方式并行处理大型查询
- 支持通用SQL
在大多数情况下遵循ANSI SQL标准
三、CLickhouse 基础知识科普
1、架构层面
(1)分片
- 数据读取由分布式表从所有分片获取数据,作并行处理后返回客户端
- 数据写入有2种方式: 1、直接写入本地表,通过外部负载均衡实现数据平均分布 2、通过分布式表写入,利用sharding_key实现数据平均分布, 支持如下分片方式:
分片方式 |
说明 |
random随机分片 |
写入数据会被随机分发到分布式集群中的某个节点上 |
constant固定分片 |
写入数据会被分发到固定一个节点上 |
column value分片 |
按照某一列的值进行hash分片 |
自定义表达式分片 |
指定任意合法表达式,根据计算后的值进行hash分片 |
(2)副本
- Clickhouse 使用 zookeeper(请使用3.4.5或以上版本)存储副本的元信息
- 副本是表级别的,不是服务器级别的。所以服务器里可以同时有复制表和非复制表
- 只有MergeTree 系列里的表可支持副本
- INSERT和ALTER语句会被复制
- 复制方式是多主异步的
2、表引擎
(1)合并树家族(MergeTree)
合并树家族(MergeTree)是Clickhouse内适用于高负载任务的最通用和功能最强大的表引擎,基于MergeTree还衍生出十多种具备不同特性的表引擎,下文会重点介绍MergeTree。日志平台选用的是ReplicatedMergeTree,以实现数据副本复制
(2)集成的表引擎
支持直接从Hive、S3、RabbitMQ、kafka、mysql等14种常见的数据源同步数据
(3)特殊的表引擎
- 分布式表:本身不存储数据,读取时可在多个服务器进行分布式查询,自动并行后返回。写入时可通过sharding_key将数据写入各个shard
- 物化视图:功能类似于数据库视图
3、表结构(MergeTree)
(1)索引
- 一级索引(稀疏索引):将每列数据按照 index granularity(默认8192行)进行划分,查询时用二分法查找数据。因此,应尽量选用区分度低的字段
- 二级索引(跳数索引):跳数索引是指数据片段按照粒度(index_granularity)分割成小块后,将一定数量(granularity_value)的小块按照一定规则组合成一个新的块,对这个新的块写入索引信息
(2)主键
主键值不是唯一的,且主键必须是 order by 字段的前缀字段。主键索引采用的是稀疏索引。
(3)排序(必填)
MergeTree 中唯一一个必填项,它设定了分区内的数据按照哪些字段顺序进行有序保存,应根据字段使用频率、优先级,由高至低组合,在没有显式设置主键的情况下,order by 字段即主键。
(4)常用压缩方式
- LZ4:默认的压缩方式,压缩/解压性能极强,但压缩率一般
- ZSTD[(level)]:压缩/解压性能不如LZ4,但压缩率比LZ4高,常用于字符串类型。默认level为1,支持1-22,数字越大压缩率越高,但压缩/解压消耗的cpu、io资源就越多,可结合实际情况设置level值,在cpu资源和磁盘空间之间达到相对平衡
(5)分区
分区是在一个表中通过指定的规则划分而成的逻辑数据集。分区的目的主要是降低扫描的范围,避免全表扫描,优化查询速度,一般按月、日或事件类型来划分。但要避免过于精细的分区方案,以免影响整体性能。
(6)数据生命周期
支持字段、表级别的TTL。当字段的值过期时,会替换成该字段的默认值,当该字段所有值过期,会自动删除此字段;当表中的数据行过期时,会自动删除对应行
四、Clickhouse的配套组件
- zookeeper
负责存储表的元数据,用于副本复制
- chproxy
负责Clickhouse节点的负载均衡,可实现读写分离
- clickvisual
目前市面上唯一一款支持clickhouse的类kibana的业务日志查询平台,支持日志查询、聚合、告警
五、CLickhouse部署架构参考
下图为1分片2副本的架构图:
六、参考文档
- Clickhouse
https://clickhouse.com/docs/zh
- Chproxy
https://www.chproxy.org/cn
- Clickvisual
https://clickvisual.gocn.vip/文章来源:https://www.toymoban.com/news/detail-774173.html
下回预告
Clickhouse多分片多副本集群的详细部署过程,欢迎关注后续更新的系列文章~文章来源地址https://www.toymoban.com/news/detail-774173.html
到了这里,关于「从ES到CK 02」Clickhouse的基础知识扫盲的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!