Apache Fluss 项目近日发布了 0.9 版本,这是项目发展历程中的一个重要里程碑。作为面向实时分析、AI 及重状态流处理的流式存储系统,Fluss 0.9 在数据模型、存储层处理、生产运维及生态集成等方面带来了显著增强,为构建统一的流处理与湖仓架构提供了更强大的基础能力。

核心更新亮点:
一、更丰富的数据模型与 Schema 演进
1. 复杂数据类型支持
Fluss 0.9 全面强化了对复杂数据类型的支持,新增 Array、Map、嵌套 Row 类型等深层嵌套结构。系统能够逐层解析这些嵌套结构中每个字段的类型和含义,而非将其作为不透明的二进制数据存储,从而保证数据写入准确性和读取精度。
此外,借助对 Lance 格式的支持,Fluss 现已支持向量存储场景。用户可使用 ARRAY 或 ARRAY 直接存储 Embedding 向量,使其可作为向量 Embedding 的数据源,供下游向量引擎增量消费以维护 ANN 索引。
2. 零拷贝 Schema 演进
新版本支持通过追加新列的方式变更表 Schema,并与 Flink SQL 完全集成。关键在于,Schema 变更时已有数据文件无需重写,仅更新元数据即可。已有记录中缺失的新增字段会被解释为 NULL,新写入的记录则立即包含新增列。这种方式避免了停机时间和昂贵的数据回填,对长期运行的流式管道尤为重要。

二、存储层处理与语义增强
1. 聚合合并引擎
Fluss 0.9 引入了聚合合并引擎(Aggregation Merge Engine),将实时聚合从计算层下推到存储层。传统方案中,实时聚合依赖 Flink 状态维护,而借助新引擎,聚合状态被外置到 Fluss,Flink 作业保持近乎无状态。
该引擎提供端到端的 Exactly-Once 语义保障。即便在故障恢复场景下,也能确保最终一致性。Fluss 通过结合 Flink Checkpoint 与自身的 Changelog 能力,在存储层实现了撤销日志(Undo Log)机制,在保障精确一致语义的同时,保持高吞吐与低延迟。
2. 自增列与字典表
新版本引入自增列(AUTO INCREMENT)支持,可自动分配唯一自增数字 ID。基于此特性,Fluss 支持字典表(Dictionary Table)模式——将长标识符(如字符串或 UUID)映射为紧凑数字 ID。
字典表在实时系统中应用广泛,可解决 ID 稠密化映射、去重计算等典型问题。结合 rbm32 和 rbm64 等基于 RoaringBitmap 的聚合函数,Fluss 0.9 提供了一套高效的去重计算方案,能够在无需维护 Flink 庞大状态的前提下,实现海量数据的实时去重统计。
3. 变更数据订阅
Fluss 0.9 引入了 和binlog 虚拟表,用于变更数据订阅。用户无需存储额外数据即可访问元数据和变更数据。
- $changelog:提供单条变更记录的完整审计追踪
- $binlog:以 Binlog 格式呈现变更数据,同时提供嵌套的 before 和 after 行结构
这些虚拟表支持 earliest、latest 和 timestamp 等启动模式,对于时间点恢复和 AI 场景下的回测至关重要。
4. Compacted 日志格式
针对全行读取场景(如聚合结果表、向量表),Fluss 0.9 引入了 Compacted(行式)日志格式。该格式将行数据以紧凑方式存储,相比默认的 Apache Arrow 列式存储,在全行读取场景下可实现更高的 I/O 效率和更低的 CPU 开销。

三、生产运维能力增强
1. KV 快照租约
新版本支持 KV 快照租约机制,提升了基于快照读取的可靠性。此前,快照清理仅由保留策略驱动,可能出现作业还在读取快照时快照被清理的情况。引入租约后,快照生命周期变为消费者感知,确保快照在整个读取过程中始终可用。
2. 集群 Rebalance
Fluss 0.9 支持在 TabletServer 之间自动重新分配 Replica 和 Leader,保证数据和流量的负载均衡。整个 Rebalance 过程中,集群写入吞吐保持平稳,各节点的磁盘使用量、Leader 数量和副本数量在完成后均匀分布。该特性简化了日常集群运维,提升了集群变更期间的稳定性。

四、生态与开发体验提升
1. 多引擎支持
- Apache Spark:引入 Spark Catalog 支持,实现无缝元数据管理,支持流式和批量读写
- Apache Flink 2.2:紧跟 Flink 最新版本,为 Delta Join 开启更丰富的查询模式,支持 ALTER TABLE 动态调整数据湖新鲜度配置
2. Azure 文件系统支持
通过新增 Azure 文件系统插件,Fluss 将云原生存储能力扩展到 Microsoft Azure,支持 Azure Blob Storage 和 Azure Data Lake Storage Gen2 作为分层存储。
3. Java 客户端 POJO 支持
为提升 Java 开发者体验,Fluss 现已支持 POJO(Plain Old Java Object)。开发者可直接将表行数据映射到 Java 类,减少样板代码,更轻松地集成到现有 Java 微服务和应用中。

4. 升级与试用
Fluss 0.9 在网络协议与存储格式层面保持了高度兼容,实现了客户端与服务端之间的完全双向兼容。详细的升级注意事项可参考官方升级指南。
目前,基于 Apache Fluss 打造的阿里云流存储已完整支持 Fluss 0.9 全部功能,并开启免费公测。公测期间单用户可免费使用 2 个集群,单个集群上限 80 Core。
文章来自:51CTO
