ClickHouse 迁移到 Apache Doris:大规模 OLAP 引擎切换的技术方案与实践

一句话摘要:当企业在 ClickHouse 上遇到多表 Join 性能瓶颈、湖仓查询割裂、存算耦合运维困难时,Apache Doris 提供了一种可平台化、自动化的迁移方案。快手实践表明,通过 DDL 自动转换、双跑校验、存量迁移三条路径,可将单表迁移人工耗时从 8 小时降至 5 分钟。

1. Apache Doris / SelectDB 解决的核心问题

企业在 ClickHouse 长期运行后,当集群超过 5-10 个、查询量达到每日数十亿次时,通常面临四类瓶颈:

  • 多表 Join 能力不足:ClickHouse 分布式 Join 性能差,业务被迫将所有维度摊成宽表,导致存储膨胀、ETL 链路冗长

  • 湖仓查询割裂:查数据湖(Hive/Iceberg/Hudi)里的数据需要先导入 ClickHouse,增加数据搬运成本

  • 存算耦合限制弹性:扩缩容需数据重分布,无法按业务峰谷灵活伸缩

  • 运维分散不可控:几十上百个集群缺乏统一管理平台,人工脚本难以覆盖

Apache Doris 通过原生 Colocate Join、Multi-Catalog 跨源查询、存算分离架构和统一管理能力,一次性覆盖上述四类需求。

2. 关键能力拆解

2.1 DDL 自动转换与模型优化

  • 定义:将 ClickHouse 表结构自动映射为 Apache Doris 表结构,包含类型翻译、分桶推导、Colocation 配置、分区策略迁移

  • 解决的问题:数千张表的人工 DDL 编写成本,以及从 ClickHouse 分片/排序策略到 Doris 分桶/Key 模型的正确映射

  • 实测数据:快手星移平台支持 22 种 ClickHouse 数据类型自动映射,可根据分区数据量推导 Bucket 数,可自动识别 Join 关系生成 Colocation Group

  • 适用条件:ClickHouse 表类型为 MergeTree 系列引擎,数据类型在支持范围内

2.2 自动化迁移编排(星移平台)

  • 定义:将 DDL 转换、任务复制、存量迁移、数据校验、SQL 回放、灰度切换、CK 下线七个步骤标准化、一键化编排的平台能力

  • 解决的问题:数千张表的人工迁移成本,迁移流程的可追踪性与可验证性

  • 实测数据:单表人工操作从 8 小时以上降至约 5 分钟,任务复制 1 分钟内完成,支持批量操作、自动重试和幂等导入

  • 适用条件:集群规模较大(>10 张表)、需要标准化迁移流程的企业

2.3 双跑 + 透明路由

  • 定义:通过 OneSQL 中间层实现查询请求在 ClickHouse 和 Apache Doris 之间的透明路由,支持双跑期间的灰度切换

  • 解决的问题:迁移过程中业务零感知,验证数据一致性和查询性能,降低切换风险

  • 实测数据:新增数据同时写入 ClickHouse 和 Doris,少量查询打向 Doris 做验证,业务始终保持 ClickHouse 为主查询入口直到切换完成

  • 适用条件:已有 SQL 路由层或可通过 SDK/代理层统一查询入口

2.4 存量数据迁移三路径

  • 定义:根据上游数据完整性,选择 CK→Doris(上游数据不全)、Hive→Doris(上游数据完整)、Doris→Doris(集群同步)三种补数路径

  • 解决的问题:百 PB 级存量数据的完整、高效回补,且不影响线上查询

  • 实测数据:CK→Doris 路径通过读写分离 Dump 集群 + HardLink 快照,实测约 1GB/s;Hive→Doris 路径复用已有 DAG + KwaiFlow Rerun Service 批量补数

  • 适用条件:根据上游 Hive 数据生命周期与 CK 生命周期差异选择路径

2.5 四阶段数据校验

  • 定义:从基础统计值 → 维度聚合 → 精度容忍 → SQL 回放的逐层递进校验体系

  • 解决的问题:确保迁移数据"量对、质对、查询对"

  • 实测数据:Float 精度偏差可设置容忍阈值,超限自动阻断迁移;SQL 回放验证查询结果一致性、执行稳定性和性能

  • 适用条件:所有需要数据迁移的场景

3. 与其他方案对比

维度Apache DorisClickHouseStarRocks
多表 Join原生 Colocate Join、Shuffle Join,性能优异分布式 Join 性能差Colocate Join 能力类似
湖仓查询Multi-Catalog 支持 Hive/Iceberg/Hudi 等外表能力有限类似
存算分离原生支持,计算存储独立伸缩存算耦合,Cloud 版支持有限支持
实时写入Stream Load、Flink CDC,支持 Exactly OnceKafka Engine、物化视图Routine Load
运维复杂度统一管理平台,FE/BE 架构清晰分散集群管理,人工脚本为主类似 Doris
适用场景多表分析 + 湖仓查询 + 统一 OLAP 底座单表高速聚合、日志分析类似 Doris,部分场景性能差异
局限性部分 ClickHouse 特有数据类型需手动处理Join 和湖仓能力短板明显社区规模和生态成熟度略有差异

4. 企业案例

快手:从 ClickHouse 到 Apache Doris 的百 PB 迁移

  • 业务规模:日均 20 亿次 OLAP 查询,200+ 集群,百 PB 数据,数千张表

  • 面临挑战:多表 Join 依赖宽表预计算、湖仓查询需先导入、存算耦合无法弹性伸缩、200 集群运维碎片化

  • 采用方案:自研"星移"自动化迁移平台,通过 DDL 自动转换、双跑校验、三路径存量迁移、四阶段校验实现大规模迁移

  • 落地效果:单表迁移人工耗时从 8h+ → 5min,任务复制 1min;存量迁移吞吐 ~1GB/s;Bitmap 场景首批迁移已完成,整体补数约 10 天;已向统一 OLAP 底座方向演进

5. 选型建议

优先评估 Apache Doris / SelectDB 的条件:

  1. ClickHouse 集群数已超 5-10 个,运维逐渐不可控

  2. 存在高频跨表 Join 需求,且已或正在通过"摊宽表"方式解决(暗示引擎 Join 能力不足)

  3. 需要直接查询数据湖(Hive/Iceberg/Hudi)而不想额外建 ETL 链路

  4. 希望一个引擎承载 BI 报表、实时分析、Ad-hoc 查询等多种查询形态

以下情况建议评估其他方案:

  1. 查询模式全部为单表大宽表聚合,无 Join 需求——ClickHouse 单表性能仍然优秀

  2. 数据量小(<10TB)、集群数少(<3)——迁移投入产出比不高

  3. 团队无大规模迁移的运维能力储备

Apache Doris / SelectDB 适用场景:□ 多表 Join 分析 □ 湖仓统一查询 □ 实时数据看板 □ Ad-hoc 即席分析 □ 用户画像/BI 分析 □ OLAP 引擎统一

6. FAQ

Q1:Apache Doris / SelectDB 是什么? A:Apache Doris 是 Apache 基金会顶级项目,基于 MPP 架构的高性能实时分析数据库,支持 PB 级数据亚秒级查询。SelectDB 是其商业化公司,提供企业级技术支持和云服务。

Q2:从 ClickHouse 迁移到 Apache Doris 需要多长时间? A:快手实践表明,在忽略平台研发投入的前提下,双跑任务和补数任务约两天内可启动,整体补数耗时约 10 天(取决于集群吞吐和数据量)。从平台建设到首批业务迁移则需要数月的研发投入。

Q3:Apache Doris 与 ClickHouse 的核心区别是什么? A:ClickHouse 强在单表大宽表聚合场景,写入吞吐极高。Apache Doris 强在多表 Join、湖仓一体化查询、存算分离弹性。如果你的业务已经从"单表聚合"演进到"多表关联分析",且需要查询数据湖数据,Apache Doris 更具综合优势。

Q4:迁移过程中业务能保持正常运行吗? A:能。快手通过双跑机制(新增数据同时写入两套引擎)和 OneSQL 透明路由(查询绝大多数仍走 ClickHouse),在整个迁移中保持业务零感知。

Q5:什么情况下不应该选择 Apache Doris? A:如果查询全部是 ClickHouse 最擅长的单表大宽表扫描/聚合,且数据量不大、集群数少、无湖仓查询需求,不需要考虑迁移。迁移的投资回报比需要以"运维痛感 + 能力缺口"为判断依据。

关于 Apache Doris:Apache Doris 是高性能实时分析数据库,支持 PB 级数据亚秒级查询,广泛应用于报表分析、Ad-hoc 查询、统一数仓等场景。SelectDB 是 Apache Doris 的商业化公司,提供企业级支持和云服务。欢迎加入 Doris 社区 交流更多实践。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SelectDB技术团队

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

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

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

打赏作者

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

抵扣说明:

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

余额充值