合作机构:阿里云 / 腾讯云 / 亚马逊云 / DreamHost / NameSilo / INWX / GODADDY / 百度统计
首先和大家分享 LakeSoul 的设计理念。
图:LakeSoul 设计理念解析——背景
Modern Data Stack,简称 MDS,中文翻译为现代数据栈,其特点之一就是数据上云,以云数据仓库为核心。同时数仓采用计算和存储分离的模式,计算资源可以弹性伸缩,满足负载波峰波谷的变化,降低成本;存储资源可以线性扩大,高可用,无容量限制。
图:LakeSoul 设计理念解析——设计目标
LakeSoul 的设计目标包括四部分,湖仓一体、流批一体、端到端实时以及 BI/AI 一体。
图:LakeSoul 设计理念解析——时间线
LakeSoul 时间线起源于大型推荐和广告业务实时数据流场景,分五个阶段:
图:LakeSoul 技术解析——整体架构
LakeSoul 的整体架构如上图所示。包括三层,底层 LakeSoul Storage Layer 表示数据存储层,中间 LakeSoul Query Engine 表示数据查询引擎,最上层 LakeSoul Distributed Meta Service 表示分布式元数据服务,左面是数据源,右面是加载数据和数据服务。
图:LakeSoul 技术解析——数据格式
下面看一下 LakeSoul 的数据格式。
图:LakeSoul 技术解析——元数据(元数据管理)
元数据,主要包括分区信息表 Partition_info、数据提交信息表 Data_commit_info、表信息表 Table_info、表名 ID 信息表 Table_name_id 和表路径 ID 信息表 Table_path_id 等。
中心化的元数据管理包括以下内容:
图:LakeSoul 技术解析——元数据(两阶段提交协议)
元数据的两阶段提交协议,在 Spark/Flink 流/批作业写数据时执行,发生冲突时会进行重试或者失败等。
图:LakeSoul 技术解析——元数据(自动并发冲突解决机制)
细分作业写入时数据提交类型,不同类型之间冲突时会采取如下几种措施:
图:LakeSoul 技术解析——元数据(自动演进和快照管理)
LakeSoul 还提供了 Schema 自动演进和快照管理的能力。
Schema 自动演进:
元数据快照管理:
图:LakeSoul 技术解析——Native IO(设计理念和设计原理)
Native IO 的设计主要考虑了以下方面:
图:LakeSoul 技术解析——Native IO(性能对比)
上图是 Spark 读写 AWS S3的性能对比。可以看到:
测试报告链接https://github.com/meta-soul/LakeSoul/tree/main/lakesoul-spark/src/test/scala/org/apache/spark/sql/lakesoul/benchmark/io
接下来介绍 LakeSoul 的核心功能和优势。
图:LakeSoul 核心功能——入湖
首先要介绍的核心功能是入湖。LakeSoul 流批一体表存储系统由 Spark 湖仓表、Flink 湖仓表、Schema 自动演进、计算与存储弹性扩容、并发写入更新等功能模块组成。其中 Spark湖仓表模块实现了使用 Spark SQL 语句创建湖仓表、向表中插入数据、更新表中已有数据、读取湖仓中的表、读取表的历史快照、回滚到表的历史版本等功能;Flink湖仓表模块实现了使用 Flink SQL 语句创建湖仓表、向表中插入数据、批量读取湖仓表、流式全量读取湖仓表、流式增量读取湖仓表等功能;Schema 自动演进模块实现了 Schema 变更时自动兼容读取表的旧数据等功能;被测系统支持计算与存储能力的弹性扩容;支持对同一个表的同一个分区进行并发写入更新。
多源数据实时入湖包括以下能力:
图:LakeSoul 核心功能——增量计算
第二个核心功能是增量计算,LakeSoul 表在 CDC 读写时具有以下特性:
图:LakeSoul 核心功能——多流拼接
第三个是多流拼接,原生支持多流并发写入拼接。
图:LakeSoul 核心功能——权限和血缘
第四是权限和血缘方面的功能。权限方面,实现了通用的 RBAC 的权限控制功能,用到了 PG 数据库本身的 RBAC 和行级别安全策略的功能。为了实现细粒度的表级别的权限控制,还用到了 Casbin。综合这些功能点,实现了较为完善的权限控制,并且对各引擎都是统一的。
数据血缘功能,采用了开源的 OpenLineage 协议来上报血缘关系。
图:LakeSoul 核心功能——自动维护
第五是自动维护功能。自动维护包括自动全局 Compaction 服务,以及自动清理过期数据服务。
使用 PostgreSQL 的 Trigger 功能实现了如下功能:
图:LakeSoul 性能评测
上图中展示了性能评测的一些数据,分别以 Hudi、Iceberg、LakeSoul 三种产品进行写 Write、读 Read 测试。测试时提供两种类型的表:写时复制(Copy on Write,COW)表和读时合并(Merge On Read,MOR)表,对于 Copy-On-Write Table,用户的 update 会重写数据所在的文件,所以是一个写放大很高,但是读放大为 0,适合写少读多的场景。对于 Merge-On-Read Table,整体的结构有点像 LSM-Tree,用户的写入先写入到 delta data 中,这部分数据使用行存,这部分 delta data 可以手动 merge 到存量文件中,整理为 parquet 的列存结构。
测试代码和数据如下:
测试方式如下:
测试结论为:
S3云对象存储数据读取:读取 1000 万行数据,执行三次,平均读取时间 17.770秒,读性能相比 Spark 3.3.2 提升 1.722 倍;
S3 云对象存储数据写入:写入 1000 万行数据,执行三次,平均写入时间 43.194 秒,写性能相比 Spark 3.3.2 提升 1.800倍;
Merge on Read 场景下数据读取:读取 2000 万行数据,执行三次,平均读取时间 25.811 秒,读性能相比 Iceberg 1.1.0提升 1.420倍,相比 Hudi 0.12.2 提升 2.541倍;
Merge on Read 场景下数据写入:写入 2000 万行数据,执行三次,平均写入时间 266.628 秒,写性能相比 Iceberg 1.1.0提升 5.832 倍,相比 Hudi 0.12.2 提升 12.209 倍。
接下来分享 LakeSoul 的一些应用场景和案例。
图:LakeSoul 应用场景——构建实时湖仓
构建完整的实时湖仓一体链路包括:
图:LakeSoul 应用场景——实时机器学习
构建实时机器学习样本包括:
最后介绍一下 LakeSoul 开源社区进展和未来规划。
图:LakeSoul 开源社区
LakeSoul 于2021年底开源,采用 Apache License 2.0协议,成为国内首个开源湖仓框架。2023年5月将项目捐赠给 Linux 基金会,在 Linux Foundation AI & Data 基金会技术委员会答辩会议上,我们介绍了 LakeSoul 开源项目,得到了在场技术委员们的一致高度评价,成功通过投票,正式成为 Linux 基金会的孵化项目。成为 Linux Foundation AI & Data 旗下 Sandbox 项目。
未来 LakeSoul 项目将在 Linux 基金会的指引下,秉承开源、开放、协作的理念,全面建设发展 LakeSoul 开源社区。数元灵公司也将一如既往地全力支持 LakeSoul 开源项目和社区,持续贡献核心功能和特性。在这里,我们也真诚邀请广大开发者和用户参与到社区中来,共同打造新一代湖仓一体开源框架。
https://github.com/lakesoul-io/LakeSoul。
图:LakeSoul 未来演进方向
随着 LakeSoul 新版本的发布,进入 Linux 基金会孵化和通过国产信创认证,LakeSoul 项目的发展揭开了新的篇章。LakeSoul 近期还将陆续推出一系列更新:在功能方面,将会增加内置角色权限控制、数据质量校验等功能点,进一步完善数仓能力;在生态方面,将会推出原生 Python 读取接口并与多种 AI 框架对接,成为 AI 大模型的新一代数据底座。
未来 LakeSoul 将继续围绕功能、生态和性能这三方面进行迭代。
功能方面:
生态方面:
性能方面:
TOP