官宣 | Fluss 0.6 发布公告

本文涉及的产品
实时计算 Flink 版,1000CU*H 3个月
简介: Fluss社区宣布0.6.0版本正式发布,历经3个多月开发,45位贡献者完成200+代码提交。新版本亮点包括:列压缩技术降低6倍存储空间、MergeEngine支持灵活主键合并策略、Prefix Lookup实现Delta Join功能。这些特性增强了Fluss的功能和性能,标志着其在构建下一代分析型流存储系统上的重要进展。

Fluss 社区很高兴地宣布 Fluss 0.6.0 版本正式发布。这一版本历时 3 个多月的密集开发,凝聚了全球 45 位贡献者的智慧与努力,累计完成 200+ 次代码提交 。衷心感谢每一位贡献者的支持!

此次版本的发布带来了诸多功能亮点:

  • 列压缩:保留列裁剪性能的同时,降低6倍存储空间!

  • MergeEngine:新增灵活的主键数据合并策略,满足不同的实时处理场景需求。

  • Prefix Lookup:Delta Join 功能,Fluss 侧就绪!

这些新特性不仅大幅增强了 Fluss 的功能丰富性,也标志着我们在构建下一代分析型流存储的道路上迈出了坚实的一步。

列压缩

Fluss 默认采用 Apache Arrow 列存格式存储实时日志数据,并充分利用 Arrow 的流式列存特性,实现了高效的流式读取与列裁剪能力。Fluss 的列裁剪操作在服务端完成,并通过端到端的零拷贝(zero-copy)优化,无需将数据从磁盘加载到内存即可直接将所需的列数据发送至网络。这一设计不仅显著提升了性能,还大幅降低网络I/O成本,减少了资源开销。在 Fluss 之前的基准测试中,当裁剪掉 90% 的列时,Fluss 的读取吞吐量提升了 10 倍 ,充分展现了其在流式数据处理和传输方面的卓越表现。

列裁剪显著降低了网络 I/O 的成本,但磁盘存储成本仍然居高不下。为此,我们在本版本中引入了列压缩功能,支持 ZSTD 和 LZ4 两种高效压缩算法,能显著降低数据存储,从而大幅降低存储开销。由于压缩和解压都在客户端进行,因此减少了数据在网络中的传输量,网络I/O成本进一步得到降低。值得一提的是,压缩是针对每一列独立进行的,因此在启用压缩后,仍能保持原有的列裁剪性能,确保流读效率不受影响。

为了验证这一特性的实际效果,我们用淘宝的核心日志场景进行了基准测试。测试中,我们使用相同规模的数据集,相同资源的 Flink 作业,分别以无压缩和 ZSTD 压缩的方式写入 Fluss,并对比了写入吞吐量;随后从表中读取数据,测试了读取吞吐量。结果表明,列压缩不仅显著降低了6倍的存储量,吞吐也得到了一定提升。

而开启压缩后的 Flink 读写 CPU 与内存并未产生明显变化。

同时测试了在压缩数据上进行列裁剪读取的性能,可以看到随着裁剪列数的增多,仍然能够获得倍数的性能提升,保持了原有的列裁剪性能。

鉴于列压缩在通用场景均有显著的成本收益和性能提升,在 Fluss 0.6 版本中,日志表默认开启了 ZSTD 压缩,用户可以通过在表上设置 'table.log.arrow.compression.type'='NONE' 参数关闭。

Merge Engine

Fluss 在此版本中为主键表引入了全新的 Merge Engine 特性,以灵活地支持相同主键数据的合并策略。主键表默认的 Merge Engine 策略为保留每个主键对应的最新记录。用户也可以选择其他 Merge Engine,目前已经支持了 FirstRow Merge EngineVersioned Merge Engine,并计划在之后的版本中支持 Aggregate Merge Engine。

FirstRow Merge Engine

通过在表属性中设置 'table.merge-engine' = 'first_row',用户可以为每个主键保留第一条记录。开启该配置的主键表,只会生成 append only 的变更日志,从而使下游的 Flink 作业在订阅该主键表时,能获得一个 append only 流,从而能应用一些不支持回撤(retraction)消息的算子,如 Window Aggregate,Interval Join等。该功能常用于替代在流式计算中的日志去重操作,并能有效降低成本和系统复杂性。

# 创建 first_row 主键表
CREATE TABLE T (
    k  INT,
    v1 DOUBLE,
    v2 STRING,
    PRIMARY KEY (k) NOT ENFORCED
) WITH (
    'table.merge-engine' = 'first_row'
);

INSERT INTO T VALUES (1, 2.0, 't1');
INSERT INTO T VALUES (1, 3.0, 't2');

SELECT * FROM T WHERE k = 1;

-- Output
-- +---+-----+------+
-- | k | v1  | v2   |
-- +---+-----+------+
-- | 1 | 2.0 | t1   |
-- +---+-----+------+

Versioned Merge Engine

Versioned Merge Engine 支持基于版本号(或事件时间戳)进行数据的更新。它确保每个主键仅保留具有最高版本号(或事件时间戳)的记录行。该机制在去重或合并乱序数据时尤为有用,同时能够保证与上游数据源的最终一致性。这一功能在流式计算可用于替代 Rank 或 Deduplication(去重)操作,可以简化工作流程,并有效降低成本。

# 创建 versioned 主键表,指定 ts 为版本列
CREATE TABLE VERSIONED (
    a INT NOT NULL PRIMARY KEY NOT ENFORCED,
    b STRING, 
    ts BIGINT
 ) WITH (
    'table.merge-engine' = 'versioned',
    'table.merge-engine.versioned.ver-column' = 'ts'
);
INSERT INTO VERSIONED (a, b, ts) VALUES (1, 'v1', 1000);

-- 插入一条数据 ts < 1000, 该数据会被忽略
INSERT INTO VERSIONED (a, b, ts) VALUES (1, 'v2', 999);
SELECT * FROM VERSIONED WHERE a = 1;
-- Output
-- +---+-----+------+
-- | a | b   | ts   |
-- +---+-----+------+
-- | 1 | v1  | 1000 |
-- +---+-----+------+


-- 插入一条数据 ts > 1000, 更新会被执行
INSERT INTO VERSIONED (a, b, ts) VALUES (1, 'v3', 2000);
SELECT * FROM VERSIONED WHERE a = 1;
-- Output
-- +---+-----+------+
-- | a | b   | ts   |
-- +---+-----+------+
-- | 1 | v3  | 2000 |
-- +---+-----+------+

Prefix Lookup for Delta Join

在 Flink 宽表构建场景中,通过 Delta Join 来优化双流Join是目前 Fluss 的一个主要使用场景,我们也将这部分功能贡献到了 0.6 版本中。Delta Join 可以简单理解成“双边驱动的维表 Join”,就是左边来了数据,就根据 Join Key去点查右表;右边来了数据,就根据 Join Key 去点查左表。全程就像维表Join一样不需要 state,但是实现了双流Join一样的语义,即任何一边有数据更新,都会触发对关联结果的更新。通过 Delta Join 解决大状态双流Join遇到的成本高、作业不稳定、Checkpoint超时、重启恢复慢等问题。

整体而言,Delta Join 依赖三个核心功能:

  1. Source 表具备 CDC 流读功能:Fluss 的最基础能力

  2. Source 表具备根据 Join Key 索引点查功能:Fluss 0.6 版本引入 Prefix Lookup 支持

  3. Flink SQL 实现 Delta Join 算子: FLIP-486,预计规划在 Flink 2.1 版本中。

当 FLIP-486 完成后,用户便可通过如下 SQL 配合 Fluss Prefix Lookup 实现 Delta Join:

CREATE TABLE fluss_left_table (
  a1 BIGINT,
  b1 BIGINT,
  c1 INT,
  d1 INT,
  PRIMARY KEY (c1,d1,a1) NOT ENFORCED  -- 需要把 bucket key 定义为前缀
) WITH (
  'bucket.key' = 'c1,d1' -- 需要手动指定 bucket key
);

CREATE TABLE fluss_right_table (
  a2 BIGINT,
  b2 BIGINT,
  c2 INT,
  d2 INT,
  PRIMARY KEY (c2,d2,a2) NOT ENFORCED  -- 需要把 bucket key 定义为前缀
) WITH (
  'bucket.key' = 'c2,d2' -- 需要手动指定 bucket key
);

-- 将会优化成 delta join, 其中 join key 为两张表对应的 bucket key
SELECT * FROM fluss_left_table INNER JOIN fluss_right_table 
  ON c1 = c2 AND d1 = d2

Flink 通过 Join Key 来点查 Fluss 表,而 Join Key 是 Fluss 表的 Bucket Key,可以命中 Fluss 表的主键前缀索引,实现高效的索引查询,这个特性在 Fluss 中称为 Prefix Lookup。目前也可以使用 Prefix Lookup 来完成一对多的维表查询,具体可以查看 Prefix Lookup 文档

性能与稳定性

在本版本中,我们着重提升了系统的稳定性和性能,解决了 50 多个缺陷和改进,并对核心模块进行了深度优化。例如:

  • 服务端优化 :通过引入延迟响应机制,显著降低了低流量场景下的 CPU 消耗,从而提升了资源利用效率。

  • 客户端优化 :新增统一的内存管理机制,有效避免了高流量场景下的 OOM(内存溢出)问题,同时减少了垃圾回收(GC)对系统性能的影响。

这些改进显著增强了 Fluss 在高并发、大数据量场景下的可靠性与性能表现,使其能够更高效地应对分析型流存储任务的挑战。

湖流一体

在之前的版本中,Fluss 中的表如果需要启用湖流一体能力,则必须在建表时进行配置,否则后续只能通过删表重建的方式来实现。这是由于启用湖流一体功能会改变数据的 key 编码格式以及 bucket 分片策略,导致已存在的表无法直接兼容。

在新版本中,我们通过提前感知集群默认的湖存储格式,并统一采用湖格式的 key 编码和 bucket 分片策略,从而实现了在建表后动态开启湖流一体的能力,避免了删表重建的繁琐操作,提升了用户体验。此外,本版本还升级了对 Paimon 的依赖至最新的 1.0.1 版本。

Flink 集成

本版本在 Flink 连接器中新增了以下功能支持:

  1. Sink 支持忽略回撤

    主键表和日志表的 Sink 均新增了对 'sink.ignore-delete' 参数的支持,从而能够更好地适配包含回撤消息(retraction messages)的场景,满足更复杂的流式数据处理需求。

  2. 分区表增强操作支持

    分区表现在支持 ALTER TABLE ADD/DROP PARTITIONSHOW PARTITIONS 操作,进一步提升了分区管理的灵活性和易用性。

  3. Sink 接口升级

    SinkFunction 升级至 SinkV2 接口,为下一版本全面兼容 Flink 2.0 奠定了基础,确保系统在未来版本中的扩展性和兼容性。

升级注意事项

Fluss 社区尽可能保证升级的兼容性。但是,Fluss 0.5 升级到 0.6 是一个不兼容升级。我们将从 0.6 版本开始正式提供向后兼容的能力,以确保未来版本升级更加平滑和可靠。因此 0.6 版本是我们推荐使用和生态对接的版本。

后续规划

在下一版本中,我们将围绕以下核心功能展开研发,进一步提升 Fluss 的湖流一体能力、企业级能力、性能和稳定性,也欢迎大家在社区讨论和贡献:

  1. 全新的湖流一体架构
    面向大规模生产环境设计的全新湖流一体架构,通过插件化支持多种主流湖格式(如 Iceberg、Hudi 等),解决 Tiering Service 在性能、扩展性和可运维性上的痛点,为企业级应用场景提供了更加可靠的湖流一体解决方案。

  2. 认证与鉴权
    引入插件化认证与和细粒度权限控制,满足企业对数据安全的严苛要求。

  3. Kafka 兼容

    兼容 Kafka 网络协议,支持无缝集成 Kafka 生态系统。

更多关于版本规划的细节,欢迎访问社区讨论页面:https://github.com/alibaba/fluss/discussions/556。欢迎大家的建议和贡献!

贡献者列表

Fluss 社区感谢对此版本做出贡献的每一位贡献者(按首字母排序):

Benchao Li, ForwardXu, Gang Yang, Georgios Andrianakis, Giannis Polyzos, Hongshun Wang, Jark Wu, Kerwin, Leonard Xu, LiJingwei, Liu Xiao, MehulBatra, Michael Koepf, Nicholas Jiang, Ron, RunningDB, Sagar Sumit, SeungMin, Shuo Cheng, Stan, SteNicholas, Tyrantlucifer, Vipamp, WangS-C, WenjunMin, Wenston Xin, Xiaojian Sun, Yang Guo, Yubin Li, Yuepeng Pan, Zmm, benjobs, gongzhongqiang, gyang94, jon-qj, luoyuxia, moses, psxjoy, wangwj, wudi, xiaozhou, yunhong, yuxia Luo, 码界探索, 道君

关于 Fluss

官网:https://alibaba.github.io/fluss-docs 查看文档和试用

GitHub:https://github.com/alibaba/fluss 关注项目和参与社区,欢迎 star 🌟


更多内容


活动推荐

阿里云基于 Apache Flink 构建的企业级产品-实时计算 Flink 版现开启活动:
新用户复制点击下方链接或者扫描二维码即可0元免费试用 Flink + Paimon
实时计算 Flink 版(3000CU*小时,3 个月内)
了解活动详情:https://free.aliyun.com/?utm_content=g_1000395379&productCode=sc

相关实践学习
基于Hologres+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
相关文章
|
6月前
|
消息中间件 存储 Kafka
Fluss: First Impression
Fluss: First Impression
127 0
|
4月前
|
存储 Rust Go
介绍一下这只小水獭 —— Fluss Logo 背后的故事
Fluss是一款开源流存储项目,致力于为Lakehouse架构提供高效的实时数据层。其全新Logo以一只踏浪前行的小水獭为核心形象,象征流动性、适应性和友好性。水獭灵感源于“Fluss”德语中“河流”的含义,传递灵活与亲和力。经过30多版设计迭代,最终呈现动态活力的视觉效果。Fluss计划捐赠给Apache软件基金会,目前已开启孵化提案。社区还推出了系列周边礼品,欢迎加入钉钉群109135004351参与交流!
705 3
介绍一下这只小水獭 —— Fluss Logo 背后的故事
|
8月前
|
消息中间件 存储 Kafka
Fluss: First Impression
本文由Flink PMC Member徐榜江翻译自Yaroslav Tkachenko的文章《Fluss: First Impression》,介绍了阿里巴巴开源的新一代流存储系统Fluss。文章分为七个部分,涵盖Fluss简介、Table作为核心概念、PrimaryKey Table、一体化集成、Flink SQL的Delta Join、Fluss实现细节及总结。Fluss通过表结构组织数据流,支持主键表和高效的点查,深度集成LakeHouse,并计划与Flink深度集成,提供实时数据分析能力。
544 13
Fluss: First Impression
|
2月前
|
存储 消息中间件 OLAP
淘天AB实验分析平台Fluss落地实践:更适合实时OLAP的消息队列
淘天集团数据开发团队基于Fluss构建新一代实时数仓,解决数据消费冗余、探查困难及大State运维难题。Fluss融合列存与实时更新能力,支持列裁剪、KV点查、Delta Join及湖流一体,显著降低IO与计算资源消耗,提升作业稳定性与数据探查效率。已在淘天AB实验平台落地,覆盖搜索、推荐等核心业务,通过618大促验证,实现千万级流量、秒级延迟,资源消耗降低30%,State缩减超100TB。未来将持续深化湖仓架构,拓展AI场景应用。
800 17
淘天AB实验分析平台Fluss落地实践:更适合实时OLAP的消息队列
|
6月前
|
存储 运维 监控
阿里妈妈基于 Flink+Paimon 的 Lakehouse 应用实践
本文总结了阿里妈妈数据技术专家陈亮在Flink Forward Asia 2024大会上的分享,围绕广告业务背景、架构设计及湖仓方案演进展开。内容涵盖广告生态运作、实时数仓挑战与优化,以及基于Paimon的湖仓方案优势。通过分层设计与技术优化,实现业务交付周期缩短30%以上,资源开销降低40%,并大幅提升系统稳定性和运营效率。文章还介绍了阿里云实时计算Flink版的免费试用活动,助力企业探索实时计算与湖仓一体化解决方案。
797 3
阿里妈妈基于 Flink+Paimon 的 Lakehouse 应用实践
|
3月前
|
SQL 存储 缓存
Fluss 实战:用 Partial Update 构建实时宽表的新范式
传统流式数据管道通过多表 Join 构建宽表,如实时推荐引擎需整合用户偏好、购买记录等8个数据源,但此方法在大规模场景下状态管理复杂、资源消耗高且调试困难。Fluss 提出部分更新方案,基于主键将各数据源独立写入共享宽表,避免复杂 Join 操作。示例中,通过 Flink SQL 创建推荐、曝光、点击等表,并逐步插入数据实现宽表构建。最终,借助 Fluss 的高效合并机制,输出包含最新信息的统一视图,提升可扩展性和维护性。
219 8
Fluss 实战:用 Partial Update 构建实时宽表的新范式
|
6月前
|
SQL 存储 消息中间件
vivo基于Paimon的湖仓一体落地实践
本文整理自vivo互联网大数据专家徐昱在Flink Forward Asia 2024的分享,基于实际案例探讨了构建现代化数据湖仓的关键决策和技术实践。内容涵盖组件选型、架构设计、离线加速、流批链路统一、消息组件替代、样本拼接、查询提速、元数据监控、数据迁移及未来展望等方面。通过这些探索,展示了如何优化性能、降低成本并提升数据处理效率,为相关领域提供了宝贵的经验和参考。
863 3
vivo基于Paimon的湖仓一体落地实践
|
9月前
|
存储 消息中间件 SQL
流存储Fluss:迈向湖流一体架构
本文整理自阿里云高级开发工程师罗宇侠在Flink Forward Asia 2024上海站的分享,介绍了湖流割裂的现状与挑战,Fluss湖流一体架构的设计与优势,以及未来规划。内容涵盖湖流割裂的现状、Fluss架构详解、湖流一体带来的收益,以及未来的生态扩展和技术优化。
887 11
流存储Fluss:迈向湖流一体架构
|
6月前
|
传感器 算法 Java
基于 pyflink 的算法工作流设计和改造
本文分享了硕橙科技大数据工程师程兴源在Flink Forward Asia 2024上的演讲内容,围绕工业互联网场景下的Flink应用展开。主要内容包括:为何选择Flink、算法工作流设计、性能优化实践、上下游链路协作思考及未来展望。团队通过Flink处理工业设备数据(如温度、振动等),实现故障预测与分析。文章详细探讨了性能优化路径(如批处理、并行度提升)、KeyBy均衡化、内存管理等技术细节,并介绍了数据补全方法和告警规则的设计。最后,对未来基于Flink的编码强化、CEP模式改进及工业数据归因目标进行了展望。
232 7
基于 pyflink 的算法工作流设计和改造