当前位置:首页>python>官宣 | Fluss Rust/Python/C++ 客户端 0.1 版本现已正式发布!

官宣 | Fluss Rust/Python/C++ 客户端 0.1 版本现已正式发布!

  • 2026-09-05 00:57:59
官宣 | Fluss Rust/Python/C++ 客户端 0.1 版本现已正式发布!

作者: 罗宇侠, Keith Lee, Anton Borisov

这是 Fluss 多语言原生客户端的首个正式版本,标志着 Apache Fluss 正式突破 JVM 生态边界,向 Rust、Python 和 C++ 开发者开放实时流式存储能力。

过去数月,社区从零开始构建了完整的多语言客户端体系,累计完成 210+ 次代码提交。三个客户端共享同一个 Rust 核心引擎,上层提供轻量的语言绑定,从一开始就确保了原生性能与功能一致性。主要亮点包括:

  • • 完整支持 Fluss 所有表类型:Log 表、主键表和分区表
  • • 基于 Apache Arrow 的零拷贝(Zero-Copy)数据交换,与 Polars、Pandas、DuckDB 等工具无缝集成
  • • 直接从分层存储(Tiered Storage)读取历史数据,绕过服务端中转,显著降低回放开销
  • • 幂等写入(Idempotent Write)和内存感知反压(Backpressure),满足生产环境的可靠性需求

统一的 Rust 核心架构

与传统的"每种语言各写一套客户端"不同,Fluss 社区做出了一个关键的架构决策:以 Rust 作为统一内核,Python 和 C++ 作为上层绑定。

协议协商、批量发送、重试机制、Arrow 序列化等核心逻辑只需实现一次,所有语言共享同一套经过充分测试的代码路径。Rust 的内存安全和零成本抽象(Zero-Cost Abstraction)保证了核心引擎的性能与可靠性,而 Python(通过 PyO3)和 C++(通过 FFI)的绑定层则保持轻量,专注于提供符合各自语言习惯的 API。

这一设计带来的直接收益是:新功能只需在 Rust 核心中实现一次,即可同步覆盖三种语言,大幅降低维护成本的同时,也确保了跨语言的功能一致性。

支持所有 Fluss 表类型

本次发布完整支持 Fluss 的三种表类型:

  • • Log 表:用于流式追加写入,支持基于订阅的轮询消费。典型场景包括点击流、IoT 传感器数据和审计日志。
  • • 主键表(Primary Key Table):支持 Upsert、Delete 和基于主键的点查(Point Lookup),并支持部分列更新。典型场景包括商品目录和由多数据源驱动的实时仪表盘。
  • • 分区表:Log 表和主键表均支持分区,读写操作具备分区感知能力。

所有表类型均支持幂等写入和内存感知的反压机制,可直接用于生产环境。Scanner 内置了基于优先级队列的远程 Segment 并行预取机制,确保大规模扫描场景下的高吞吐。Python 客户端还额外提供了 Polars 和 Pandas 的专属 API,可无缝融入 DataFrame 工作流。

以下是 Rust 客户端的一个简单示例:

// 创建连接let conn = FlussConnection::new(conn_config).await;let admin = conn.get_admin();// 建表let table_descriptor = TableDescriptor::builder()    .schema(        Schema::builder()            .column("c1", DataTypes::int())            .column("c2", DataTypes::string())            .build(),    )    .build();admin.create_table(&table_path, &table_descriptor, true).await?;// 写入数据let table = conn.get_table(&table_path).await;let writer = table.new_append().create_writer();let batch = record_batch!(    ("c1", Int32, [1, 2, 3]),    ("c2", Utf8, ["a", "b", "c"]))?;writer.append(batch)?;writer.flush().await?;// 消费数据let scanner = table.new_scan().create_log_scanner();scanner.subscribe(0, 0).await;let records = scanner.poll(Duration::from_secs(10)).await?;

零拷贝 Arrow 集成

全面拥抱 Apache Arrow 生态——无论使用 Polars、Pandas、DuckDB、DataFusion 还是直接使用 Arrow,客户端都原生支持 Arrow 格式。

整个数据链路中,日志记录均以 Arrow RecordBatch 形式表示。从 Fluss 获取的数据可以直接传递给下游工具,无需任何额外的序列化或格式转换。批量扫描(Batch Scanner)模式直接返回完整的 RecordBatch,开箱即用:

  • • Python 用户:数据可直接传给 Polars 或 Pandas 进行分析
  • • C++ 应用:可将数据直接输入 DuckDB 进行查询
  • • Rust 工具:同样受益于零拷贝路径

Java 客户端目前不提供此能力——Flink 和 Spark 在摄入数据时会将其转换为各自的内部行格式。而对于原生客户端生态来说,省去这一步转换,正是性能提升的关键。

直接读取分层存储

Fluss 会将较旧的日志 Segment 下沉到远端对象存储。当需要回放或回填历史数据时,客户端直接从对象存储读取这些 Segment,无需经由服务端中转。这样做既避免了回放负载对在线服务的冲击,也省去了数据在集群中的额外搬运。

支持的存储后端(通过 Feature Flag 启用):

  • • storage-fs — 本地文件系统(默认)
  • • storage-s3 — Amazon S3
  • • storage-oss — 阿里云对象存储 OSS

内置基于优先级队列的预取系统,支持可配置的并发下载数,确保顺序扫描不会因对象存储的网络延迟而阻塞。

更多特性

本次发布还包含以下重要能力:

  • • SASL/PLAIN 认证:三个客户端均支持安全认证,满足生产环境的安全需求
  • • 完整的 Admin API:支持数据库和表的创建、删除、列举、分区管理、Offset 查询等完整管理操作
  • • 异步批量写入(Fire-and-Forget):支持可配置的 Bucket 分配策略(Hash、Round-Robin),高效利用网络带宽
  • • 列裁剪(Column Pruning):只读取所需的列,减少网络传输和内存开销
  • • 丰富的数据类型:完整支持基础类型、Decimal、时间类型(Date、Time、Timestamp)、Binary、String 等

快速开始

三种语言的客户端均已发布,即刻可用:

  • • Rust:fluss-rs 已发布到 crates.io,参见 安装指南[1]
  • • Python:pyfluss 已发布到 PyPI(pip install pyfluss),参见 安装指南[2]
  • • C++:fluss-cpp 通过 CMake / Bazel 构建,参见 安装指南[3].

未来规划

这是 fluss-rs、pyfluss 和 fluss-cpp 的首个版本,社区正在积极拓展更多能力。未来的发展方向包括:

  • • 更多语言绑定
  • • 更多存储后端支持
  • • 增强的压缩支持
  • • 更广泛的生态集成

贡献者名单

Apache Fluss Rust 社区衷心感谢所有为本次版本做出贡献的开发者:

AlexZhao, Andrea Bozzo, Anton Borisov, Arnav Panjla, Chase Naples, Evan, Jark Wu, Junbo Wang, Junfan Zhang, Kaiqi Dong, Karan Pradhan, Keith Lee, Kelvin Wu, Miao, Nikhil Negi, Pavlos-Petros Tournaris, Prajwal Banakar, SkylerLin, Yang Guo, Yuxia Luo, naivedogger, tison

Apache Fluss Rust 正在持续迭代中,欢迎关注项目动态,体验试用。如果你喜欢这个项目,欢迎在 GitHub 上点赞支持!

[1] https://clients.fluss.apache.org/user-guide/rust/installation/[2] https://clients.fluss.apache.org/user-guide/python/installation/[3] https://clients.fluss.apache.org/user-guide/cpp/installation/


欢迎 star 🌟 和加入 Apache Fluss 贡献:

https://github.com/apache/fluss/

欢迎加入"Fluss 社区交流群"群的钉钉群号: 109135004351

最新文章

随机文章