CK01# ClickHouse术语及知识点梳理

2022-06-23 13:42:44 浏览数 (1)

引言

尽管使用ElasticSearch冷热存储架构来存储日志,成本依旧高昂,而ElasticSearch的存储成本占用70%以上,寻找新的低成本存储方案也就成了主要解决方式。

根据测评ClickHouse存储成本可以降低到ElasticSearch的三分之一以上,本文就ClickHouse的术语与知识点做个梳理,主要内容有:

  • 日志成本构成
  • ClickHouse高性能特性
  • 多主架构、分片与副本
  • MergeTree系列表引

一、日志成本构成

当前的日志平台的成本主要由下面几个方面构成:

  • 采集agent消耗的CPU和内存
  • 日志Kafka集群成本
  • Flink集群消费的计算资源
  • ElasticSearch的存储成本
  • OSS的存储成本

其中ElasticSearch的存储成本是主要部分,如何优化ES的存储成本呢?当前使用的冷热存储架构,第一天的数据存储在高配的热节点中,磁盘ESSD,之后的数据存在在低配的普通云盘中。

ElasticSearch存储成本优化点:

  • 推动业务减少不必要的日志输出
  • 持续聚焦缩短存储时间
  • 持续聚焦提高ElasticSearch的资源使用率
  • 使用低成本ClickHouse的存储替换ElasticSearch

小结:尽管使用ElasticSearch冷热存储架构来存储日志,成本依旧高昂,而ElasticSearch的存储成本占用70%以上,寻找新的低成本存储方案也就成了主要解决方式。

根据测评ClickHouse存储成本可以降低到ElasticSearch的三分之一以上,下面梳理下ClickHouse特性与知识点。

二、ClickHouse高性能特性

众多的设计和优化成就了ClickHouse的高性能,下面找一些比较突出的点梳理下:

特性

描述

列式存储

数据按列组织,同一列的数据保存在一起,不同的列分不同的文件保存

压缩算法

默认使用LZ4压缩算法,压缩比与数据相关,压缩比1:4~1:8不等

向量化执行引擎

1、利用CPU的SIMD(Single Instruction Multiple Data)单条指令操作多条数据2、在寄存器层面实现数据并行执行,寄存器访问数据的速度是内存的300倍,是磁盘的3000万倍

众多表引擎

1、提供近30种的表引擎供选择,选择表表引擎意味着选择了不同的存储查询方式2、MergeTree系列为官方主流系列

备注:在寄存器层面实现数据并行执行,SIMD大量用于文本转换、数据过滤、数据解压以及JSON转换等场景。

三、多主架构、分片与副本

1、多主架构

  • ClickHouse采用多主架构,而不是主从架构
  • 意味着不像ElasticSearch有Master、Data、Coordinating等角色的区分
  • 访问中集群中的任何节点均可获得相同的结果

2、数据副本

  • Clickhouse的副本其他组件并无差异,多一分相同的冗余数据
  • 副本是表级别的,创建表时需要使用ReplicatedMergeTree系列引擎
  • 基于多主架构通过zookeeper将执行语句分发到副本本地执行

3、数据分片

ClickHouse集群中每个节点称为分片

可通过集群借助于ZooKeeper执行分布式DDL语句

代码语言:javascript复制
CREATE/DROP TABLE ON CLUSTER my_cluster

数据通过本地表(可以使用_local后缀命名)存储,使用Distributed以外的引擎

分布式表不存储数据,为本地表的代理,类似于分库分表组件,需使用Distributed引擎

分片规则需要声明分片键,否则分布式表中只包含一个分片,失去分片的意义

小结:ClickHouse多主架构中,支持DDL的分布式动态创建,支持通过分布式表查询和写入数据。

四、MergeTree系列表引擎

选择什么样的表引擎意味着选择了不同的数据存储组织方式,ClickHouse中有合并树、外部存储、内存、文件、接口与其他六个系列引擎,其中MergeTree合并树系列为其核心引擎。

合并树表引擎

描述

MergeTree

1、MergeTree的基础引擎,该系列的其他引擎继承了其能力2、具备数据分区、一级索引、二级索引、数据TTL一级存储能力

ReplacingMergeTree

1、具备删除本分区重复数据的能力2、通过ORDER BY排序键判断数据是否重复3、在分区合并的时候删除本分区重复数据,跨分区无法删除重复数据4、手动执行分区合并消耗大量时间

SummingMergeTree

1、合并分区时按照定义条件合并汇总数据,降低查询开销2、通过ORDER BY排序键作为聚合条件3、数据的合并和汇总在分区合并时进行,跨分区不会汇总合并

AggregatingMergeTree

1、SummingMergeTree的升级版2、根据ORDER BY排序键聚合数据,并写入表中,本分区相同数据合并3、在分区合并的时候执行聚合计算,跨分区不计算

CollapsingMergeTree

1、折叠合并树通过增加不同sign标志的数据代替删除的方式,实现行数据的修改与删除2、在合并分区的时候触发3、对写入的数据有严格的顺序要求

VersionedCollapsingMergeTree

1、与CollapsingMergeTree作用相同通过对数据折叠,完成数据的删除与修改2、通过标志位sign与版本号ver共同完成数据折叠3、对写入的数据没有顺序要求,内部通过ver倒序判断

小结:基于MergeTree衍生引擎提供删除重复数据、汇总聚合、删除与修改的能力,然而他们只适合特定的场景,都在分区合并的执行,不支持跨分区。

0 人点赞