ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

S3 Table 免费开源:把 MinIO 收费功能打成开源

S3 Table 免费开源:把 MinIO 收费功能打成开源 一套自托管的数据湖组件往往比想象中多对象存储负责放 Parquet还得再单独跑一个 catalog 服务Hive Metastore、Glue、Nessie 或者 Polaris来管表的元数据。每多一个组件就多一份部署、鉴权、备份和升级的活。商业方案看到了这个痛点把它做成了增值项——MinIO 的 S3 TableIceberg Catalog只在付费的 AIStor 产品线上提供开源的 AGPL 社区版从 2025 年底进入维护模式这条能力不在其中。被锁在社区版的团队要么忍着多跑一个服务要么为这项能力额外买授权。过去两年这个问题的答案基本只有「自己再搭一套」一种它也是今年自托管圈子里被反复问到的同一个问题能不能不额外付费、也不额外部署就把目录层拿到手RustFS 给出的回答是把它做进存储内核Apache Iceberg 的 REST Catalog 以 Apache 2.0 内置进对象存储服务2026-09-10 官宣随 1.0.0 GA2026-09-16 发布提供没有「社区版没有、企业版才有」的分层。落到部署上是一个进程、一个端口9000同时讲 S3 和 Iceberg REST Catalog 两套语言。下面按官方文档把上手过程走一遍顺便把几个还没填平的坑记下来。它到底把什么塞进了存储Iceberg 客户端的工作方式分两面一面通过 REST Catalog 发现表、提交元数据变更另一面通过 S3 API 读写真实的表文件。RustFS 的做法是让这两个接口都跑在 S3 API 那个端口上。真正的 Parquet 数据文件还是由计算引擎Spark、DuckDB、PyIceberg经 S3 API 直写进桶里不经过任何中间层——典型的存算分离。元数据指针受一个保留前缀保护普通的 S3 操作改不动那个目录区所以你用aws s3 cp这类命令不会把数据湖写坏。提交快照走控制面目录层用 CAS 版本校验拒绝过期的并发提交、用幂等键消除重复提交保证多引擎并发写入的一致性不过事务范围目前只限单表。对已经熟悉 S3 的人最大的变化是你不再需要为了建一张 Iceberg 表去维护第二个服务。代价是存储层多了一层 catalog 语义下面会说到它现在的边界。从空桶到一张表下面这套命令直接来自官方 S3 Tables 文档对照 1.0.0 GA在本地localhost:9000跑通了。先设置端点与凭证exportRUSTFS_ENDPOINThttp://localhost:9000exportAWS_ACCESS_KEY_IDyour-access-keyexportAWS_SECRET_ACCESS_KEYyour-secret-keyexportAWS_DEFAULT_REGIONus-east-1建一个专用桶aws --endpoint-url$RUSTFS_ENDPOINTs3api create-bucket--bucketmy-bucket把它启用为表存储桶注意这是一个空请求体 SigV4 签名的调用签名服务名是s3curl--fail-with-body--silent--show-error\--aws-sigv4aws:amz:us-east-1:s3\--user$AWS_ACCESS_KEY_ID:$AWS_SECRET_ACCESS_KEY\--headerx-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\--requestPUT$RUSTFS_ENDPOINT/iceberg/v1/buckets/my-bucket返回 HTTP 200 且响应里enabled: true、catalog-type: iceberg-rest就成功了。之后接 Iceberg 客户端关键参数只有四项REST Catalog URIhttp://localhost:9000/iceberg客户端会自动在末尾补/v1warehousemy-bucket就是桶名不是 S3 URI也不是 AWS ARNREST 鉴权AWS SigV4签名服务名s3区域us-east-1S3 文件端点http://localhost:9000走路径式寻址一个容易踩的点即便用同一个账户REST 请求的签名和 S3 文件访问要分别配置。实际配置时如果只配了 S3 那头客户端会报 403补上 catalog 的 SigV4 才通。哪些客户端能直接用RustFS 维护了一份支持矩阵状态分几档Automated有可运行脚本覆盖、Manual/live harness有 pinned 输入和 CI 门禁但 live 跑默认不启、Documented有文档没自动化。我整理成一张表落到实操建议上想最快验证用DuckDB Iceberg 1.5.5或PyIceberg最稳这两个是 Automated单表增删改查、schema 演化、快照、并发写都有脚本覆盖。Spark 和 Trino 给了 live harnessSpark 的写兼容靠实际部署版本验证Trino 只声明了只读、不声明写兼容。StarRocks 目前只是外部 catalog 读路径的文档参考Documented, not automatedDatabend 给了 live harness但也只做表数据文件的 S3 读探测不声明 Iceberg REST 集成。端点层面/iceberg/v1是规范前缀/_iceberg/v1是 MinIO AIStor 风格的兼容别名两个都 Supported。必须说清的边界这条表能力在 1.0.0 中仍被官方文档标注为预览Preview——1.0.0 GA 的稳定性承诺针对的是核心对象存储引擎S3 API、桶/对象生命周期、纠删码、复制等S3 Tables 属于已内置、但仍处预览阶段的能力。下面几条都是官方明确写进文档的约束格式支持 Iceberg v1 和 v2默认 v2不支持暂存式建表staged create、删表时清除数据purge-on-drop、以及 Iceberg v3。不提供 SQL 执行引擎不提供多表原子事务不提供跨区域独立双活写入。不声明完整兼容 AWS S3 Tables 控制面。它实现的是开放的 Iceberg REST Catalog 协议“开源 S3 Table应该理解为免费 开放协议的 Iceberg 目录”不是 AWS S3 Tables 的平替克隆。元数据删除和后台维护默认关闭没有内置的定期维护调度器要靠显式操作触发。删除表只移除目录条目、保留底层对象——所以千万别对快照或其他元数据还引用的 S3 路径做递归删除。默认object目录后端会把目录状态持久化到 RustFS 自身如果你要从默认后端切到durable-strong必须按官方目录切换流程走预检和协调隔离写入方不能原地硬切。这些约束符合预览功能的定位意味着它目前更适合在隔离环境里验证可行性而不是直接上生产关键链路。和 MinIO 的同名能力怎么比把这件事说清楚得先厘清 MinIO 现在的两条产品线。MinIO Object Store 是开源那条线许可证 GNU AGPL v3但从 2025 年 12 月起进入维护模式不再接受新功能与 PR、不再提供 RPM/DEB/Docker 构建也就是基本不再演进。S3 Table 这条能力不在它身上。真正带 S3 Table / Iceberg Catalog 的是AIStor——一个与开源线分开发布的二进制走的是商业许可证。MinIO 官方给它定的单价是按容量计费公开口径约$0.02/GB/月。换句话说想在 MinIO 上用原生 Iceberg 目录得先进入商业授权这条线。RustFS 这边是把同一类能力以 Apache 2.0 内置进存储服务没有「社区版没有、企业版才有」的分层也不用为 catalog 能力单独付费。差异点主要落在授权模式上而不是「谁有这个功能」自托管团队如果只想少维护一个 catalog 组件、又不想为商业授权买单RustFS 这一档的门槛更低。但反过来MinIO 的 AIStor 在商业支持、合规承诺上更成体系且 Tables 这条线 GA 得更早2026-02——选型时别只看「功能清单里有这一行」要看你愿不愿意为支持买单、以及能不能接受 RustFS 这边的预览状态。如果你打算试照这个顺序来升级到1.0.0GA 或更高版本且固定版本标签别用latest进生产实验。单独建一个桶专门做表存储桶不要把普通桶的生命周期过期规则直接套上去——文档明确普通生命周期会跳过表桶但在现有桶上启用表模式会改变其过期执行方式。REST 和 S3 两端分别配 SigV4 签名区域统一us-east-1签名服务名都是s3。IAM 先按文档的最小权限配启用要admin:SetTableBucket、查状态要admin:GetTableBucket、命名空间和表操作对应admin:SetTableNamespace/admin:CreateTable/admin:GetTableMetadata/admin:CommitTable表文件读写还要单独的 S3 权限。维护操作删除表、清 orphan 对象默认关先想清楚保留引用再开别急着rm -rf。先拿 DuckDB 或 PyIceberg 在单机上跑通一张表的建、写、读、删再考虑往多引擎、多桶扩展。一句话收尾RustFS 把 Iceberg 目录收编进对象存储对想少部署一个组件的自托管数据湖来说是个实在的方向但它在 1.0.0 里仍是预览能力、且有上面那些不声明项。上生产前先按上面六步在隔离环境里验证一遍比直接信特性清单靠谱。
返回列表