当前位置: 首页
数据库
快手百PB数据迁移:从ClickHouse到Doris的200+集群实践

快手百PB数据迁移:从ClickHouse到Doris的200+集群实践

热心网友 时间:2026-07-18
转载

快手基于ApacheDoris实现百PB级数据、200余个集群的平滑迁移,通过自研“星移”平台自动化DDL转换、任务复制与存量数据迁移,业务无感切换,缩短数据加工链路,降低运维成本,为统一OLAP分析底座奠定基础。

上回聊到快手在 AB 场景中实现了 145 倍的性能提升,重点讲了从 Spark 迁移到 Apache Doris 的路径。这次,咱们把视角拉高,系统梳理一下快手在 OLAP 分析引擎领域,从 ClickHouse 向 Apache Doris 迁移的完整实践。

ClickHouse 在 Join 能力、湖仓一体、存算分离以及运维复杂度上的局限,让快手不得不寻找更优解。基于 Apache Doris,快手引入了更完善的多表 Join、湖仓查询和存算分离能力,并搭建了自动化迁移平台“星移”。这个平台把 DDL 转换、任务复制、存量数据迁移等流程,全都平台化、自动化了。

这套体系最终支撑了百 PB 级数据、200 多个集群、数千张表的平滑迁移。业务侧无感切换,复杂数据加工链路缩短了,集群运维和业务使用成本降下来了,也为统一内部 OLAP 分析底座打下了基础。

本文整理自快手数据平台部数据引擎技术中心严炜琦在 Apache Doris × 快手北京线下 Meetup 上的演讲。

为什么要从 ClickHouse 迁移至 Apache Doris?

在快手内部,ClickHouse 曾长期是主力分析引擎,商业化、电商、AB、KwaiBI 等业务线的 OLAP 查询场景,基本都跑在它上面。但随着业务规模增长,快手的 OLAP 日均查询量已经超过 20 亿次,内部有 200 多个集群、百 PB 级数据量,以及数千张表。

在这个体量下,继续依赖 ClickHouse,逐渐暴露出复杂分析、湖仓查询、资源弹性和集群运维等方面的棘手问题。迁移到 Apache Doris / Bleem,目标是承接现有查询负载的同时,进一步简化数据链路和平台运维,逐步建设统一的 OLAP 分析底座。

注:Bleem 是快手内部基于 Apache Doris 的发行版,下文统一用 Doris / Bleem 表述。

从架构层面来看,这次迁移主要解决四类问题

百 PB 数据迁移面临哪些核心挑战?

从业务和实施层面来看,从 ClickHouse 迁移到 Doris / Bleem,绝不是简单的数据导出导入。快手内部业务规模大、数据链路复杂,整个迁移过程面临以下五方面挑战:

  • 数据类型和表类型复杂。ClickHouse 支持大量数据类型,还包含聚合表、Replacing 表等多种表类型。迁移时,这些都得完整映射到 Doris / Bleem 上。
  • 表数量多。ClickHouse 作为快手长期主力分析引擎,业务内部已有数千张表。如果每张表都要独立处理 DDL、任务复制、任务校验和数据校验,人工成本高得吓人。
  • 查询量大。快手是数据驱动型公司,OLAP 日均查询量超过 20 亿次。迁移过程中必须保证业务零感知,不能影响线上查询稳定性。
  • 业务覆盖广。ClickHouse 覆盖商业化、电商、AB、KwaiBI 等多个核心业务线,迁移过程需要兼顾不同业务场景的差异化诉求。
  • 数据规模大。快手内部有 200 多个集群,累计数据规模达到百 PB 级,存量数据迁移链路必须具备高吞吐、可扩展和低影响能力。

这些挑战决定了迁移不能依赖人工脚本和单点经验,必须通过平台化方式,将流程标准化、自动化,并实现全链路可追踪。同时,目标引擎也需要具备完善的数据模型、导入机制和集群管理能力,以承接持续写入和大规模历史补数。

整体迁移架构如何设计?

快手内部业务通过 SDK 接入查询,并通过 OneSQL SQL 层实现透明路由。OneSQL 可以将查询透明转发到 ClickHouse 或 Doris / Bleem 集群,这为迁移过程中的双跑、校验和灰度切换提供了基础。

在 Doris / Bleem 侧,集群提供三种存储模式供业务选择:内表磁盘、内表 S3 和外表。通过不同的数据存储与访问方式,Doris / Bleem 可以根据查询时效、性能和成本要求承载不同类型的数据,逐步将原本分散在 ClickHouse 和其他分析链路中的能力,统一到同一套查询体系中。

从迁移阶段来看,整体可以分为迁移前、迁移中和迁移后三个阶段。

迁移前:ClickHouse 承载线上业务

业务查询通过 OneSQL 路由到 ClickHouse。ClickHouse 的数据导入主要有两条链路:Hive to ClickHouse 主要用于离线覆盖,通常是 T+1 或小时级数据覆盖;Kafka to ClickHouse 提供近实时能力,达到分钟级数据可见性。

迁移中:ClickHouse 与 Doris / Bleem 双跑

迁移过程中,平台会先创建 Doris / Bleem 表,并复制 Hive to ClickHouse、Kafka to ClickHouse 两类导入任务,让新增数据同时写入 ClickHouse 和 Doris / Bleem。同时,通过 OneSQL 将部分查询打到 ClickHouse,部分查询打到 Doris / Bleem,用于验证数据一致性和查询性能。此时业务仍然主要在 ClickHouse 上运行,对业务侧保持无感知。

迁移后:业务查询全部切换至 Doris / Bleem

当数据校验、性能验证和灰度切换完成后,业务查询最终切换到 Doris / Bleem,并开始作为业务统一的 OLAP 查询入口,承接实时分析、多表 Join、看板查询和湖上数据分析等场景。随后逐步下线 ClickHouse 集群、ClickHouse 表以及 ClickHouse 导入任务。

如何通过“星移”平台实现迁移自动化?

针对表结构复杂、任务数量多、存量数据大和校验难等问题,快手将迁移流程拆成 8 个步骤,并通过内部“星移”平台进行自动编排:DDL 转换、任务复制、存量数据迁移、数据校验、SQL 回放、灰度切换和 ClickHouse 下线。

其中,DDL 转换、任务复制、存量数据迁移和数据校验是迁移前中期的核心环节,后文将重点围绕这几个环节展开。

星移平台不仅负责迁移流程自动化,也负责将 ClickHouse 中的表结构、导入任务和查询模式,转换为更适合 Doris / Bleem 的实现方式。整体主要承担两类能力:

  1. 自动编排迁移流程。平台将七个步骤标准化、一键化,支持迁移任务自动管理、批量操作、自动重试和幂等导入。
  2. 对接外部基础设施。平台依赖 SeaTunnel、KwaiFlow 调度平台和 OneSQL 查询路由等组件。其中,SeaTunnel 用于 ETL 任务处理,KwaiFlow 用于离线任务调度,OneSQL 则承担查询透明路由和迁移灰度能力。

在效率方面,星移平台将大量依赖人工的流程自动化。具体到单张表,人工操作时间可以从原来的 8 小时以上降低到约 5 分钟;任务复制可以在 1 分钟内完成;迁移过程中的分区导入也具备幂等和失败自动重试能力。

接下来,重点看几个核心环节。

DDL 转换:自动完成表结构映射

ClickHouse 与 Doris / Bleem 在表类型、分桶策略、Colocation 和 Key 策略上存在差异。星移平台会自动解析 ClickHouse 表结构,支持 ClickHouse 的 22 种数据类型转换,并可根据分区数据量推导 Doris / Bleem 的 bucket 数,在查询性能和 FE 元数据压力之间取得平衡。

同时,平台会从 Order By、Primary Key、Hash Column 等信息中推导分桶 Key,并根据可能发生 Join 的表组自动生成 Colocation Group,减少后续查询中的 Shuffle 开销。

所以,DDL 转换并不只是语法翻译,还包含面向 Doris 的模型适配和局部优化。平台将 ClickHouse 中依赖人工设计的分片、排序和本地 Join 策略,转换为 Doris 的分桶、Key 模型和 Colocation 设计。

任务复制:一键启动导入双跑

平台会将原有 Hive to ClickHouse、Kafka to ClickHouse 任务,复制为 Hive to Doris、Kafka to Doris 任务,并启动双跑。新增数据同时写入 ClickHouse 和 Doris / Bleem,业务查询仍保持在 ClickHouse 上,等数据一致性和性能验证通过后再灰度切换。

离线任务依赖 KwaiFlow API 调度,历史数据可通过 Rerun Service 回刷;实时链路则通过 SeaTunnel、Stream Load 以及 Flink Engine 完成写入。为了保障可靠性,平台还支持 Exactly Once、分区级 overwrite 等特殊机制,避免重复写入。

通过 Doris 的 Stream Load、分区覆盖写入和批流导入能力,平台能够将离线与实时数据统一接入 Doris,同时保持迁移期间数据持续更新,避免因全量迁移造成长时间停写。

存量数据迁移:按场景选择补数链路

存量数据迁移是整个迁移过程中最关键的部分之一。快手主要设计了三条链路。

  • ClickHouse to Doris:适用于上游 Hive 数据不完整的场景。例如 ClickHouse 表生命周期是 365 天,但 Hive 只保留 30 天数据,缺失的历史数据需要从 ClickHouse 侧补齐。
  • Doris to Doris:适用于 Doris 集群之间的主备同步,或小表快速迁移。
  • 离线补数:适用于上游 Hive 数据完整的场景,可以直接复用 Hive to Doris DAG,通过 KwaiFlow 的 Rerun Service 在 Spark 上完成历史数据补齐。

对于最关键的 ClickHouse to Doris 链路,快手没有直接从线上 ClickHouse 大表导出,而是基于读写分离架构构建 Dump 集群,将导出压力与线上查询隔离,并通过 HardLink 方式快速获得源集群数据视图。实测可达到约 1GB/s 的导出速度。Doris 侧则通过并行导入、分区级写入和弹性计算资源承接大规模补数,使存量迁移与实时数据写入可以并行推进,且业务查询无感知。

数据校验:保证迁移结果可信

快手采用四阶段校验机制:先做基础数据量和统计值校验,再做核心维度聚合校验;对于 Float 等存在精度偏差的字段设置容忍阈值,超过阈值则由平台阻断迁移;最终,校验结果、任务状态、补数进度和异常信息都在星移平台统一展示。

除了验证数据本身,后续的 SQL 回放还用于确认同一查询在 Doris / Bleem 上的结果一致性、执行稳定性和性能表现,从而验证 Doris 对原有业务查询的完整承接能力。

通过这套流程,迁移从人工经验驱动,转变为平台化、可验证、可追踪的标准流程。

结束语

在迁移进展方面,快手已率先完成 Bitmap 业务场景的首批迁移,已迁移集群数据规模达到 PB 级。在不计算平台研发投入的情况下,双跑任务和补数任务均可在约两天内启动,整体补数耗时主要取决于集群吞吐,约为 10 天。

总结下来,Doris / Bleem 在这一轮演进中扮演了三个关键角色:首先,它是 ClickHouse 工作负载的承接引擎,保证存量业务平滑迁移;其次,它通过更强的 Join、索引和湖仓查询能力,帮助业务减少宽表与数据搬运;最后,它作为统一 OLAP 底座,推动快手将分散的查询、存储和集群运维能力逐步平台化。

长期来看,快手希望以 Doris / Bleem 为基础,打造统一的多模湖仓查询引擎,打通实时、离线与湖上数据,减少数据在不同引擎之间的搬运。在此基础上,平台将承载指标查询、即席分析、向量检索以及面向 Agent 的自然语言数据分析等多样化负载,为业务提供高性能、低延迟的数据查询服务。

来源:https://juejin.cn/post/7662754741400649766

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
SQL数据库视图简化开发人员编码的实用方法

SQL数据库视图简化开发人员编码的实用方法

视图适合封装固定逻辑(如固定时间窗口、静态状态过滤)和固定JOIN关系,不宜用于需动态传入参数(如用户ID、日期范围)的查询。视图性能取决于底层索引,而非视图本身。ALTERVIEW仅更新元数据,会短暂阻塞新查询启动,应避开高峰期操作。

时间:2026-07-18 22:24
MySQL decimal使用常见问题及解决方法

MySQL decimal使用常见问题及解决方法

MySQL中的DECIMAL类型用于精确数值计算,通过DECIMAL(M,D)定义精度与标度。常见问题包括精度设置不当导致溢出、计算时精度溢出、插入格式错误等。优化建议:合理设置M和D,可用BIGINT存储分单位,关键列建索引,保持版本更新。

时间:2026-07-18 22:22
MySQL大字段TEXT建立索引导致的性能下降解决方案

MySQL大字段TEXT建立索引导致的性能下降解决方案

TEXT字段无法直接建立常规B+树索引,前缀索引不支持左模糊查询,全文索引受词长、中文分词和更新延迟限制。高效替代方案是使用MD5摘要索引和垂直拆分,将TEXT字段分离到独立表,主表采用DYNAMIC行格式,避免溢出页IO问题。

时间:2026-07-18 22:22
金仓数据库迁移避坑指南:从未被质疑的左连接隐患

金仓数据库迁移避坑指南:从未被质疑的左连接隐患

迁移至金仓KES时,LEFTJOIN若在WHERE中过滤右表非空列,将会触发外连接消除,导致数据结果减少。正确做法是将过滤条件置于ON子句中。金仓KES与主流数据库行为一致,务必通过EXPLAIN仔细检查执行计划,以确保连接语义正确。

时间:2026-07-18 22:22
PostgreSQL与MySQL数据库日志机制深度对比

PostgreSQL与MySQL数据库日志机制深度对比

PostgreSQL仅使用一套WAL日志,就同时实现了MySQL的redo、binlog和undo的全部功能,而MySQL因插件式架构需要三套日志并依赖两阶段提交保证一致性。其多版本并发控制通过追加写实现,无需单独的undo日志,但需要定期执行VACUUM操作清理死元组,防止表膨胀。

时间:2026-07-18 22:22
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 热门数据榜