
最近几年湖仓一体有点像健身圈的增肌减脂一样,大家都在喊,但真能练出结果的没几个。公司里很多同事问我:“到底上 Delta、Hudi、Iceberg 哪个能让性能好一点?”我一般会反问一句:“你到底卡在哪?写入慢、更新慢、还是元数据炸了?”因为不同系统解的根本不是同一道题。
我自己踩湖仓的坑时间挺长了,从 2019 年开始玩 Hudi,到 2020-2021 年在公司搞实时数仓,到 2023 年跟着大厂联合项目上线 Iceberg,再加上一些 POC 里跑 Delta。性能提升有没有?有,但绝对不是产品宣传里那种“一套解决所有问题”的体验。
有段时间我们内部查询经常被业务方喷:统计延迟高、表膨胀、调度窗口越来越挤。我自己也觉得很无奈,Hive 那套批处理已经跟不上需求了。尤其是那个 6 小时跑一次的用户画像任务,每次都卡在 IO 上,动不动半夜被电话叫醒。
后面业务提出更多实时场景,比如订单变化要 1 分钟以内可见、会员积分要可回溯、营销要多版本对比。Hive 根本搞不定增删改,HBase 又太贵,Kafka Sink HBase 还要对账。所以数据湖概念开始被我们拉来救火。说白了,一个系统只要能“存 Parquet + 能 upsert + 查询还能凑合快点”,大家就会拿它当救星。
湖仓一体概念就是在这个背景下被各种厂商推上台的:一次存储,多种引擎能读;既能批,又能流;还能追版本,还能 upsert。所以它不是为了性能,而是为了减少混乱的架构堆叠。
很多人喜欢用一句话概括:数据仓库是结构化、数据湖是非结构化。这个说法过于教材化,也没啥营养。从我们 DBA 和数仓开发的视角看,最本质的区别就一个:
仓库喜欢“结构 + 模型 + 稳定”,湖喜欢“原始 + 灵活 + 不要烦我”。
仓库强调:“你写进来之前想清楚类型、建好 schema、规划好分区”,湖强调:“你先丢进来,我帮你记着,后面谁要用再整理。”仓库适合报表、报税、对账这类必须稳定的场景。数据湖适合日志、埋点、半结构化、快速迭代。
这三家其实代表了三个“时代的需求”:
我个人的体感是:
实际场景选型的时候,要先搞清楚:你到底是写多还是读多,是更新多还是追加多。不要为了“湖仓一体”而湖仓一体。
这个概念面试常考,但真理解的人不多。
写入的时候把整个 parquet 文件 copy 一份,再把改动写进去。
优点:读很快,因为数据整洁。
缺点:写入慢得要死,遇上 1 小时 400 万条更新,直接把我们 ODS 层写入延迟从 2 分钟推到 15 分钟。
更新的时候写 Log 文件,读的时候再合并。
优点:写很快。
缺点:读慢,而且越合越碎。
在我们公司的一个广告业务里,用户地理位置更新特别频繁,COW 直接把集群打出 95% IO 使用率,换成 MOR 以后写入时间从 12 分钟 → 1 分 30 秒,但查询耗时从 20s 跳到 90s。
我们有个订单表,1 天 upsert 大概 800 万条。最开始用 Iceberg,结果写入延迟太高,因为 Iceberg 的 upsert 是“rewrite files”,本质上偏向 COW 风格。后来切到 Hudi,延迟直接除以 4。但 Hudi 的 compaction 又给我们带来新的噩梦:凌晨 2 点突然 CPU 飙到 800%,把隔壁表都干挂了。
我的结论:
我第一次觉得 Iceberg 香,是因为我们有个表 1.2 亿分区(按天 城市 业务类型)。
Hive Metastore 直接崩。Spark 访问这个表花了 40 秒光在拿分区信息。换成 Iceberg 后,元数据存在 manifest 文件里,查 8ms 就回来了,让人感动到想哭。
简单说:
Iceberg 更像 Git,每次都是最小化变更,元数据轻量级。
这块我在项目里踩过一次特别坑:
我们想用 Iceberg + Flink 做 CDC,结果 upsert 场景稳定性一般,尤其旧版本频繁出现小文件雪球效应。最后又绕回 Hudi,Hudi 的写入方式和 checkpoint 机制对 Flink 更友好。
经验:
不要盲目追“流批一体”。你可能得到的是“批也不快、流还不稳定”。
很多人以为湖仓加速靠 Parquet + 索引。但实际排查慢查询的时候,真正能拉开差距的是:
我们公司有个用户行为日志表,300TB,Iceberg。查询慢得像蜗牛。后来发现:
加下面这条后性能直接翻倍:
CALL iceberg.system.rewrite_data_files(
table => 'user_behavior',
strategy => 'sort',
sort_order => 'user_id, event_time'
);冰山这套自动优化确实香,比 Delta、Hudi 的 cleaner、compaction 调起来省太多脑细胞。
如果按照我自己的体感:
我给个我自己总结的“粗暴版选型”:
→ Hudi(MOR)
→ Delta
→ Iceberg
→ Delta 最快落地,生态成熟。
→ Iceberg 的生态扩张比另两家快。
如果你问我湖仓一体有没有提升性能,我的答案是:你用得对,它能让你快两倍;你用得不对,它能让你慢十倍。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。