1. 课程导入

欢迎进入《ClickHouse市场数据监控与容量规划实战》。在开始动手之前,我们需要先建立一张清晰的“认知地图”:这门课到底解决什么问题、涉及哪些核心概念、整体学习路径如何展开。市场数据监控与容量规划看似是两个方向,但在 ClickHouse 的实际生产环境中,它们是一体两面的——监控告诉你“现在发生了什么”,容量规划告诉你“接下来还能撑多久”。

一、学习目标:从“能查”到“可运营”

本课程不是 ClickHouse 的语法入门课,而是面向生产运营的实战课。完成学习后,你应当能够独立完成以下四类任务:

  • 监控体系搭建:基于 system 表、Prometheus 与 Grafana,构建覆盖写入、查询、合并、磁盘、副本延迟的监控面板。
  • 异常定位与告警:识别慢查询、写入堆积、Merge 滞后、副本不同步等典型故障,并设置合理阈值。
  • 容量建模与预测:根据市场数据日增量、压缩率、TTL 策略,估算磁盘、内存与 CPU 需求。
  • 扩容与成本优化:在分片、副本、冷热分层之间做出权衡,输出可执行的扩容方案。

一句话概括:让 ClickHouse 集群在市场数据持续增长的压力下,保持可观测、可预测、可扩展。

二、核心概念:先统一语言

在后续章节中,以下概念会反复出现。这里先给出精确定义,避免后续沟通歧义。

概念 含义 在本课程中的关注点
Part 一次写入形成的数据片段,是 Merge 的基本单位 Part 数量过多会拖慢查询与合并
Merge 后台将多个小 Part 合并为大 Part 的过程 Merge 滞后是写入堆积的常见根因
Replica 同一分片的数据副本,通过 ZooKeeper/Keeper 协调 副本延迟直接影响数据可用性
TTL 数据过期自动删除或降冷策略 决定磁盘长期增长曲线
压缩率 原始数据与磁盘占用之比 容量估算的关键系数
Market Data 行情、逐笔、快照、K线等时序数据 高写入、高基数、查询模式固定

市场数据具有鲜明的特征:写入吞吐高、时间序列强、查询以时间范围聚合为主、历史数据价值随时间衰减。这些特征决定了 ClickHouse 的表引擎选择、分区策略和 TTL 设计,也决定了监控指标与容量模型的侧重点。

三、整体框架:监控与容量规划的双螺旋

本课程共 30 章,整体分为四个阶段:基础认知 → 监控体系 → 容量建模 → 运营实战。监控与容量规划并非线性推进,而是相互印证:监控数据是容量模型的输入,容量预测又反过来指导监控阈值的设定。

市场数据 ClickHouse 运营双螺旋 监控体系 写入速率 · 查询延迟 · Merge 队列 副本延迟 · 磁盘水位 · 内存占用 告警阈值 · 根因定位 容量规划 日增量 · 压缩率 · TTL 策略 磁盘/内存/CPU 估算 分片副本 · 冷热分层 · 扩容方案 指标输入 阈值反馈 市场数据核心对象 行情快照 · 逐笔成交 · K线聚合 · 时间分区 · TTL 阶段一:基础认知 第1-6章 阶段二:监控体系 第7-16章 阶段三:容量建模 第17-24章 阶段四 第25-30章

上图展示了本课程的核心结构:监控体系与容量规划围绕市场数据这一核心对象形成闭环。监控指标是容量模型的输入,容量预测结果又用于校准监控阈值。四个阶段从认知到实战逐步深入。

四、典型场景与常见误区

先看一个真实场景。某行情平台使用 ClickHouse 存储逐笔成交数据,日均写入约 8 亿行,单日原始数据约 120 GB,压缩后约 18 GB。初期集群运行平稳,但三个月后出现查询变慢、写入延迟升高。排查发现:Part 数量从每分区几十个增长到上千个,Merge 队列持续积压,磁盘水位达到 82%。

-- 查看当前活跃 Part 数量(按分区)
SELECT
    partition,
    count() AS part_count,
    formatReadableSize(sum(bytes_on_disk)) AS disk_size
FROM system.parts
WHERE active = 1 AND table = 'market_trades'
GROUP BY partition
ORDER BY part_count DESC
LIMIT 10;

-- 查看 Merge 队列积压情况
SELECT
    database,
    table,
    elapsed,
    progress,
    num_parts,
    formatReadableSize(total_size_bytes_compressed) AS total_size
FROM system.merges
ORDER BY elapsed DESC;

这个案例暴露了两个典型误区:

  • 误区一:只监控服务器资源,不监控 ClickHouse 内部状态。CPU 和磁盘 IO 正常,不代表 Part 和 Merge 健康。
  • 误区二:容量规划只看磁盘总量,忽略增长速率与 TTL 效果。磁盘还有 18% 空间,但按当前增速两周后就会写满。

复盘要点:监控指标必须覆盖“资源层 + 引擎层 + 业务层”三个层次;容量规划必须同时考虑“当前水位 + 增长速率 + 过期回收”三个变量。缺少任何一层,都会导致误判。

五、本课程的学习方法建议

为了最大化学习效果,建议按以下方式推进:

  1. 先跑通再优化:每章的示例 SQL 和配置先在测试环境执行,观察真实输出。
  2. 带着数据学:用自己的市场数据或模拟数据代入容量公式,而不是只看理论。
  3. 建立指标基线:在监控章节中,为每个核心指标记录正常范围,后续排障才有参照。
  4. 定期复盘:每完成一个阶段,回头检查监控面板与容量模型是否一致。

提示:本课程后续所有命令均基于 ClickHouse 23.x 及以上版本,部分 system 表字段在旧版本中可能不存在,请以实际版本为准。

现在你已经了解了课程的目标、核心概念与整体框架。接下来,我们将从市场数据的特征与 ClickHouse 的存储模型开始,逐步构建完整的监控与容量规划能力。