中间件--ClickHouse-5--架构设计(分布式架构,列式压缩存储、并行计算)

发布于:2025-04-16 ⋅ 阅读:(27) ⋅ 点赞:(0)

1、整体架构设计

ClickHouse 采用MPP(大规模并行处理)架构,支持分布式计算和存储,其核心设计目标是高性能列式分析。

(1)、存储层

  • 列式存储:
    数据按列存储(而非传统行式存储),每个列独立存储为文件,仅读取必要列,减少 I/O。
    优势:

    • 列式压缩率高(如数值列使用 Delta 编码,字符串使用 LZ4 或字典编码)。
    • 数据局部性好,适合向量化计算。
  • 数据分块(Blocks):
    数据被划分为 固定大小的块(默认 如8192行),每个块独立压缩存储,支持快速读取和并行处理。

  • MergeTree 家族引擎:
    核心存储引擎,基于 LSM-Tree 概念,数据按 ORDER BY 排序,通过后台合并(Merge)优化查询。
    常见引擎:

    • MergeTree:基础引擎,无复制。
    • ReplicatedMergeTree:支持副本,依赖 ZooKeeper 实现高可用。
    • SummingMergeTree:自动合并相同分组的聚合结果(如 SUM)。

(2)、查询处理层

  • 向量化执行引擎:

    • 批量处理:一次可处理 1024 行(或更多)数据,而非逐行执行。
    • SIMD 指令:利用 CPU 的 AVX2/AVX512 指令集加速计算(如 COUNT、SUM)。
    • 零拷贝:数据直接从磁盘映射到内存,减少内存拷贝开销。
  • 查询执行流程:

    1. 解析与优化:将 SQL 转换为 AST(抽象语法树),优化查询计划(如下推过滤条件)。
    2. 执行管道:构建执行管道,按列读取数据,通过向量化函数处理。
    3. 聚合与合并:对结果进行聚合(如 GROUP BY),并合并分块数据。
  • 索引与过滤:

    • 主键索引:数据按 ORDER BY 排序,支持快速范围查询。
    • 稀疏索引:每个数据块存储列的 min/max 值,跳过无关块。

(3)、分布式架构

  • 分片(Sharding):
    数据按分片键(如 PARTITION BY 或哈希)水平拆分到多个节点,实现负载均衡。

  • 副本(Replication):
    每个分片可配置多个副本(如 ReplicatedMergeTree),通过 ZooKeeper 协调同步,确保高可用。

  • 分布式表(Distributed Table):
    逻辑表,代理访问多个分片,支持跨节点查询:

  CREATE TABLE distributed_table 
  ENGINE = Distributed('cluster', 'local_database', 'local_table');
  • 查询时自动分发到各分片并行执行,结果合并后返回。

  • ZooKeeper 集成:
    用于协调分布式集群的元数据(如副本状态、分片分配)和故障转移。

2、核心组件与流程

(1)、数据写入流程

  1. 插入数据:通过 INSERT INTO 写入本地表,数据暂存为 临时文件。
  2. 合并(Merge):后台进程定期合并小文件为大块,按 ORDER BY 排序,优化查询性能。
  3. 副本同步:ReplicatedMergeTree 通过 ZooKeeper 同步数据到其他副本。

(2)、查询执行流程

  1. 解析与优化:
    • SQL 被解析为 AST,优化器选择最优执行计划(如过滤下推、并行策略)。
  2. 分布式查询:
    • 若查询分布式表,ClickHouse 将任务分发到所有分片并行执行。
  3. 向量化计算:
    • 按列读取数据块,利用 SIMD 指令批量处理(如过滤、聚合)。
  4. 结果合并:
    • 分片结果返回后,ClickHouse 合并最终结果(如 GROUP BY 的最终聚合)。

(3)、数据压缩与存储

  • 压缩算法:

    • LZ4:压缩速度快,适合实时场景。
    • ZSTD:压缩率更高,适合存储优化。
    • 自适应压缩:根据列类型选择最优算法(如数值列用 Delta + LZ4)。
  • 存储结构:

    • 数据按 数据块(Block) 存储,每个块包含多个列的压缩数据。
    • 索引信息(如 min/max)存储在块的元数据中。

3、关键特性与优势

(1)、列式存储的优势

  • 高效查询:仅读取所需列,减少 I/O。
  • 高压缩率:同类数据压缩效率比行式存储高 5-10倍。
  • 向量化计算:CPU 利用率高,适合现代硬件的 SIMD 指令。

(2)、分布式与高可用

  • 多主架构:集群节点对等,无单点故障,支持跨数据中心部署。
  • 故障自动恢复:通过 ZooKeeper 监控节点状态,故障时自动切换副本。

(3)、向量化执行引擎

  • 零拷贝技术:数据直接从磁盘映射到内存,避免 CPU 内存拷贝。
  • 批量处理:一次处理 1024 行数据,减少分支预测开销。

4、架构示意图

在这里插入图片描述

5、典型应用场景

(1)、实时分析:如日志分析、用户行为统计。
(2)、OLAP 查询:快速聚合 PB 级数据(如 SUM、COUNT、DISTINCT)。
(3)、时序数据:物联网设备数据的高效存储与查询。

6、总结

ClickHouse的列式存储、向量化执行引擎和分布式架构 是其高性能的核心。通过 数据分块压缩、MPP 并行计算 和 ZooKeeper 协调,它在海量数据分析场景中实现了 秒级响应 和 线性扩展能力。其架构设计特别适合读多写少的场景,但需注意避免频繁更新/删除操作(因其追加写入模式)。

逆风翻盘,Dare To Be!!!


网站公告

今日签到

点亮在社区的每一天
去签到