🏢 公司C档 · NaN分

AWS悄悄填了湖仓最堵的那个坑

··约1分钟阅读

📋 总体概括

Amazon Redshift 更新了对 Iceberg 表并发写的冲突自动消解:不再让所有并发提交一刀切失败重试,而是通过操作、分区、文件三层校验,把不重叠的写入 rebase 后正常提交。本文拆解其机制、吞吐收益,以及背后湖仓竞争进入'体验内卷'阶段的产业逻辑。

📄 正文

做数据平台的人,多少都被 Iceberg 的并发提交失败折磨过:两条互不相干的写入管道,一个写分区 A,一个写分区 B,理论上井水不犯河水,提交时却齐刷刷报冲突,只能加重试、排队、错峰。Amazon Redshift 最近的一次更新,把这个坑悄悄填了——不重叠的并发写不再失败,而是自动消解、正常提交 [1]。

这不是一个发布会级别的功能,却可能是今年对湖仓使用者最'省钱'的改动之一。核心判断是:开放表格式的战争打完了,下一轮竞争在提交协议这种看不见的地方,谁把冲突检测做得越准,谁的客户计算账单就越便宜。

💥 一次凌晨三点的 commit 失败,暴露了乐观并发的真面目

先讲个场景。某电商公司的数据团队,凌晨三点跑例行 MERGE:订单管道在写 Iceberg 表的分区 dt=2025-06-01,库存管道同时在写 dt=2025-05-31。两条作业互不搭界,但几乎同时提交。结果其中一条抛出并发冲突,作业失败,下游告警,值班工程师爬起来重跑。

为什么?因为 Apache Iceberg 用的是乐观并发控制(optimistic concurrency)[2]。每个写入者都基于同一个快照(snapshot)做修改,提交时检查当前快照是不是还是自己读的那个。如果是,提交成功;如果不是,说明有人抢先提交了,引擎无法判断会不会互相踩脚,最稳妥的做法就是判定冲突、让后到的写入失败重试。

这套机制在单人开发时没问题,但在生产环境里,一个湖仓表往往有十几条管道并发写入——CDC 同步、实时聚合、回刷历史、补数作业全挤在一起。冲突检测越粗,假阳性越多,重试越频繁。这正是 Iceberg 官方文档中明确提示的场景:引擎在提交失败后需依赖上层重试机制,而重试本身不产生价值,每一次重试都是实打实的计算成本和 SLA 风险 [2]。

产业逻辑很清楚:乐观并发的吞吐上限,取决于冲突检测的精度。检测粒度越细,真正需要串行的写入越少,整个湖的并发吞吐就越高。这是湖仓引擎之间拉开差距的关键底层能力,只是长期藏在文档更新里,没人拿它当卖点讲。

🔧 三层校验做 rebase:给表提交装上了'git 的脑子'

2025 年 6 月,AWS 在 What's New 栏目发布公告,宣布 Redshift 简化对 Apache Iceberg 表的并发写入处理:当多个写入者的操作互不重叠时,Redshift 将自动消解冲突并完成提交,而不再直接判定失败 [1]。根据 AWS 文档,这次更新的本质是把冲突判定从'一刀切'升级成了三层精细化校验,逐层判断两个并发写入是否真的可能互相干扰 [3]。

第一层是操作校验(operation check):两个写入做的是不是同类操作?比如一个是追加(append)、一个是删除,操作对象和语义不同,天然不冲突的可能性就很高。第二层是分区校验(partition check):两个写入是否落在相同的数据分区?开头那个订单管道和库存管道的例子,分区不同,直接放行。第三层是文件校验(file check):即使分区重叠,还要看两个写入实际触及的数据文件是否相同——同一分区内不同的文件范围,依然可以安全共存。

三层全过,说明两个写入在物理上根本不重叠,引擎就把后到的写入 rebase 到最新的快照上,正常提交,不再报错。只有任何一层判定真重叠,才退回到失败重试的老路。

熟悉版本控制的人会一眼认出来:这就是 git 的 rebase 思想搬到了表格式上。冲突不可怕,可怕的是无法精确描述冲突。过去 Iceberg 引擎普遍选择'宁可错杀',现在 Redshift 把'错杀率'打了下来。

以一个典型的生产场景为例(示意性案例,非特定企业):大型企业的湖仓中,补数作业和实时管道最容易打架,重试风暴一来,整晚的计算资源都耗在无效劳动上。这类精细化冲突消解,对这类团队的价值比任何查询性能优化都直接。

用一张表看清楚变化前后的差异:

维度更新前的 Redshift更新后的 Redshift
并发提交判定快照变化即冲突快照变化后做三层校验
不同分区并发写失败,需重试自动 rebase,提交成功
同分区不同文件写失败,需重试自动 rebase,提交成功
真实重叠写失败,需重试失败,需重试(语义正确)
重试消耗的计算全量浪费仅真实冲突才消耗

📊 四象限看格局:谁在把'能用'做成'好用'

把视野拉开,Iceberg 已经成为湖仓事实上的中立表格式:AWS、Snowflake、Databricks、Trino、Apache Spark 全部押注。表格式不再有悬念之后,引擎层的竞争就转移到了工程细节——并发写消解正是其中之一。

用四象限给当前的主要玩家定位:横轴是并发控制等底层工程的实现门槛,纵轴是托管化体验带来的商业价值(下图为本文基于公开产品能力的定性判断,仅供讨论参考)。

右上角的 Databricks 和 Snowflake 在托管 Iceberg 体验上投入最深,冲突消解、目录集成、缓存优化都是必答题;Amazon Redshift 此番更新,明显是在向右上角追赶——而它最大的筹码是存量数仓用户的迁移惯性。左下角的开源引擎 Trino 和 Spark 依然灵活,但把'好用'留给用户自己拼装。

判断是:这类底层消解能力会迅速成为托管引擎的标配。它的护城河不深,但缺席的成本极高——因为客户感知到的方式,就是账单和告警。

💡 对企业平台团队:省的是钱,稳的是 SLA

落到使用者头上,这次更新的收益分两层。

第一层是吞吐。并发写入不再被假阳性冲突卡住,管道可以更高密度地并行调度。对于 CDC 入湖、流批一体 MERGE 这类高频写入场景,等于把过去串行排队的部分并行化了。吞吐增益不是来自引擎算力变强,而是来自无效等待变少——这是最健康的性能提升方式。

第二层是成本与可靠性。每一次冲突重试都是重复计算,重试风暴还会挤占队列、拖垮下游依赖。冲突消解后,重试只在真冲突时发生,计算开销和告警噪音同步下降。用一张痛点-解法图总结:

并发写冲突治理
痛点 1
互不重叠的写入被一刀切判定冲突,频繁失败
→
解法
三层校验识别非重叠写,自动rebase提交
痛点 2
重试风暴推高计算成本、挤占调度队列
→
解法
仅真实重叠写才进入重试,减少无效计算
痛点 3
夜间管道互相打架,值班告警不断
→
解法
不同分区与文件的并发管道可安全并行
痛点 4
流批混写场景SLA难保障
→
解法
更高并发吞吐,提交延迟与失败率下降

需要提醒的是,天上不会掉免费的午餐。冲突消解的判定本身有开销,在极端高并发、且写入高度重叠的场景下,收益会收窄——这时真正该做的不是调引擎,而是审视管道设计:分区规划是否合理、写入粒度是否过粗。冲突少的设计,永远比冲突处理得好的设计便宜。

🧭 从'格式之争'到'体验内卷':湖仓下半场打什么

回头看湖仓这几年的演进,2023 到 2024 年是表格式定音的两年:Iceberg 捐给 Apache 基金会后成为各家争相支持的公共底座,Snowflake 开放 Iceberg 表,Databricks 收购 Tabular 后全面拥抱,格式之争落幕。

下半场打什么?打细节。表的读写性能、目录(catalog)生态、还有这次的主角——并发提交协议。这些能力不会出现在发布会 keynote 上,但会在每一次 MERGE 提交、每一份月度账单里被用户体感。Iceberg 让大家用上了同一张表,接下来拼的是谁家引擎碰这张表碰得最优雅。

对国内做数据平台和湖仓的团队,有两个直接启示。其一,选型时把并发写消解、提交重试策略这类'非功能'指标纳入评测清单,它们对 TCO 的影响可能超过跑分数字。其二,自建 Trino/Spark 湖仓的团队,需要在调度层自己实现类似的冲突规避逻辑——错峰、分区隔离、提交队列,这些工作云厂商已经开始替你做了,这是托管相对自建又一个实打实的价差来源。

小结

Amazon Redshift 这次的并发写冲突消解,功能不大,信号很强:开放表格式时代,引擎竞争的战场已经沉到提交协议这一层。三层校验加自动 rebase,把乐观并发从'能用'推向'好用',直接兑换成吞吐、成本和 SLA。

往深一层看,这次更新其实回答了一个更根本的问题:当所有引擎共享同一张表、同一套格式规范之后,差异化只能来自对规范边界(spec gray areas)的工程化补齐。Iceberg 的规范定义了'提交必须串行',但没有规定'串行的粒度必须多粗'——谁把粒度切得更细,谁就能在同一条规范下跑出更高的有效并发。这注定不是一个能讲成故事的功能,却是一个能用账单证明价值的功能。

可以预见,冲突消解会迅速成为托管湖仓引擎的标配能力,而下一轮比拼,会发生在更细的写入语义(比如行级冲突消解)、更智能的提交调度(比如跨表的依赖感知排队)上。对企业平台团队而言,现在就该做的两件事是:把并发提交策略纳入选型评测清单,以及在自建湖仓的调度层补齐冲突规避逻辑。看不见的地方,才是竞争真正的分水岭。

参考资料

[1] AWS What's New:《Amazon Redshift simplifies handling of concurrent writes to Apache Iceberg tables》,发布于 2025 年 6 月。链接:https://aws.amazon.com/about-aws/whats-new/2025/06/amazon-redshift-simplifies-concurrent-write-handling-apache-iceberg-tables/

[2] Apache Iceberg 官方文档:Optimistic Concurrency 与 Conflicts 一节,描述了 Iceberg 基于快照的乐观并发模型、提交失败判定与上层重试要求。链接:https://iceberg.apache.org/docs/latest/reliability/

[3] Amazon Redshift 官方文档:Loading and writing to Apache Iceberg tables(含并发写入与冲突消解的行为说明)。链接:https://docs.aws.amazon.com/redshift/latest/dg/loading-writing-iceberg.html

“编辑说明:原文中"据多位接近云厂商的架构师反馈"与"一位在大型零售企业负责湖仓的工程师私下聊过"两处匿名信源,因无法核实,已分别替换为可引用的 Iceberg 官方文档描述 [2] 与明确标注的示意性案例;文末新增参考资料一节,供读者交叉验证。

本文由本站 AI 辅助聚合生成,原始来源如下:

🔎 本文基于以下资讯(素材溯源 · 信息来源)

📰 相关阅读推荐(与本文相关的其他资讯)