Apache Paimon-实时数据湖
一、Apache Paimon是什么?
Flink社区希望能够将 Flink 的 Streaming 实时计算能力和 Lakehouse 新架构优势进一步结合,推出新一代的 Streaming Lakehouse 技术,促进数据在数据湖上真正实时流动起来,并为用户提供实时离线一体化的开发体验。
Flink 社区内部孵化了 Flink Table Store (简称 FTS )子项目,一个真正面向 Streaming 以及 Realtime的数据湖存储项目。
2023年3月12日,FTS进入 Apache 软件基金会 (ASF) 的孵化器,改名为 Apache Paimon (incubating)。
简单来说,Apache Paimon是一个流数据湖平台,兼容Apach Flink、Spark等主流计算引擎,支持流批一体处理、快速查询和性能优化,具有高速数据摄取、变更日志跟踪和高效的实时分析的能力。
目前,24年已经在阿里巴巴集团内大规模应用,目前更新到1.0版本。
官网介绍:
Apache Paimon 是一种 Lake 格式,支持使用 Flink 和 Spark 构建实时 Lakehouse 架构,用于流式和批处理操作。Paimon 创新性地结合了 Lake 格式和 LSM(日志结构合并树)结构,将实时流式更新引入 Lake 架构。
Paimon 提供以下核心功能:
- 实时更新:
- 主键表支持大规模更新的写入,具有非常高的更新性能,通常通过Flink Streaming进行。
- 支持定义合并引擎,按您喜欢的方式更新记录。删除重复项以保留最后一行、部分更新、聚合记录或第一行,您决定。
- 支持定义changelog-producer,为合并引擎的更新生成正确、完整的changelog,简化您的流分析。
- 大量附加数据处理:
- 附加表(无主键)提供大规模批处理和流处理能力。自动小文件合并。
- 支持通过 z 顺序排序进行数据压缩以优化文件布局,并使用 minmax 等索引提供基于数据跳过的快速查询。
- 数据湖功能:
- 可扩展的元数据:支持存储Petabyte大规模数据集,支持存储大量分区。
- 支持 ACID 事务、时间旅行和模式演变。
官网:https://paimon.apache.org/
Github:https://github.com/apache/incubator2、文件-paimon
二、Apache Paimon原理
1、底层存储
Paimon采用LSM树(日志结构合并树)作为文件存储的数据结构,LSM树将文件组织成多个Sorted Run,Sorted Run由一个或多个数据文件组成,并且每个数据文件只属于一个Sorted Run。
写入LSM树的新记录将首先缓存在内存中。当内存缓冲区满时,内存中的所有记录将被排序并刷新到磁盘。
查询LSM树时,必须合并所有Sorted Run。当越来越多的记录写入LSM树时,Sorted Run的数量将会增加。由于查询LSM树需要将所有Sorted Run合并起来,太多Sorted Run将导致查询性能较差,甚至内存不足。为了限制Sorted Run的数量,我们必须偶尔将多个Sorted Run合并为一个大的Sorted Run。这个过程称为Compaction。
但是过于频繁的Compaction可能会导致写入速度变慢,这是查询和写入性能之间的权衡。
2、文件管理
一张表的所有文件都存储在一个基本目录下。Paimon 文件采用分层的方式组织。下图说明了文件布局。从快照文件开始,Paimon 读取器可以递归访问表中的所有记录。
2.1 Snapshot(快照文件)
所有快照文件都存储在snapshot
目录中。
快照文件是一个 JSON 文件,改文件包含了:
-
正在使用的架构文件
-
包含此快照所有更改的清单
快照可以捕获表在某个时间点的状态。用户可以通过最新的快照访问表的最新数据。通过时间旅行,用户还可以通过较早的快照访问表的先前状态。
--->类似Hadoop中的镜像文件和编辑日志。
2.2 Manifest Files(清单文件)
所有的清单列表(manifest list)和清单文件(manifest file)都存储在manifest
目录中。
清单列表(manifest list)是清单文件名(manifest file)的列表。
清单文件(manifest list)是包含有关 LSM 数据文件和变更日志文件的变更的文件。例如,在相应的快照中创建了哪个 LSM 数据文件以及删除了哪个文件。
2.3 DataFile(数据文件)
数据文件按分区分组。目前,Paimon 支持使用 parquet(默认)、orc 和 avro 作为数据文件的格式。(avro是行存储、parquet和orc是列存储)
2.4 Partition(分区)
Paimon 采用与 Apache Hive 相同的分区概念来分离数据。分区是一种可选方法,可根据日期、城市和部门等特定列的值将表划分为相关部分。每个表可以有一个或多个分区键来标识特定分区。通过分区,用户可以有效地对表中的一段记录进行操作。
2.5 一致性保证
Paimon 写入器使用两阶段提交协议,以原子形式将一批记录提交到表中。每次提交在提交时最多产生两个快照。这取决于增量写入和压缩策略。如果仅执行增量写入而不触发压缩操作,则只会创建增量快照。如果触发了压缩操作,则会创建增量快照和压缩快照。
对于同时修改表的任何两个writer,只要他们不修改同一个分区,他们的提交就可以并行发生。如果他们修改同一个分区,则只能保证快照隔离。也就是说,最终的表状态可能是两次提交的混合,但不会丢失任何更改。有关更多信息,请参阅专用压缩作业。
总结:Paimon通过LSM树(日志结构合并树)和列式存储格式(parquet/orc)实现高查询。
3、主要应用场景
3.1 Flink CDC将数据引入数据湖
Paimon对此进行优化,可以一键摄取整个数据库,引入数据湖,大大降低了架构的复杂性,同时还提供灵活的更新选项,允许应用特定列或不用类型的聚合更新。(支持更新的数据入湖)
3.2 构建流式数据管道
PAIMON可用于构建完整的流式数据管道,其主要功能包括:生成ChangeLog,允许流式读取访问完全更新的记录,从而更轻松地构建强大的流式数据管道。
PAIMON也正在发展为具有消费者机制的消息队列。最新版本引入了变更日志的生命周期管理,可让用户定义它们的保留时间,类似于 Kafka(例如,日志可以存储七天或更长时间)。这创建了一个轻量级、低成本的流媒体管道解决方案。
3.3 超快速OLAP查询
虽然前两个用例可确保实时数据流,但 PAIMON还支持高速 OLAP 查询来分析存储的数据。通过结合LSM和Index,PAIMON 可以实现快速数据分析。其生态系统支持Flink、Spark、StarRocks、Trino等多种查询引擎,都可以高效查询PAIMON中存储的数据。
4、实践案例
案例一:提升实时数据分析效率
问题描述:一家全球大型零售客户,其面临的挑战是如何在门店和电商平台并行的人群中进行实时的用户行为分析和个性化推荐。传统的数据分析架构下,系统无法高效处理大规模实时数据,导致用户体验不佳,推荐系统延迟高。
解决方案:通过引入Apache PAIMON,实时同步用户的购物行为和库存数据,结合Flink进行流式数据处理,客户能够基于最新数据生成个性化推荐。这不仅提升了用户的购物体验,还降低了基础设施成本。
案例二:构建可靠的实时业务监控
问题描述:一家零售客户,其供应链管理系统随着业务规模扩展和复杂性增加,运营与流程管理部门亟需实现对各类业务流程的实时监控,以确保流程的稳定性与高效性。然而,现有系统架构仅支持离线数据,无法满足实时业务需求。
解决方案:通过引入PAIMON数据湖,基于Aliyun EMR + OSS构建了一个实时数据湖。该系统通过Flink和Flink CDC实时收集多个数据源的数据,结合OSS对象存储,确保了数据的可查询性和分层复用。同时在分析层结合Doris,解决了OLAP分析时效性低的问题,提高了报表和监控系统的时效性。
--案例来自Artefact
三、Paimon和Flink神魔关系
Paimon是做湖上的实时化处理,所以他是从Flink社区诞生的,是一种流批统一的数据湖存储格式,他能够与Flink紧密配合,实现实时数据湖。为了更好的了解Paimon,我们要求清楚其他的存储格式Iceberg、Hudi是什么,和Paimon有什么关系。
Apache Hudi、Apache Iceberg 、Apache Paimon都是面向大数据湖的表格式存储管理框架。
- Hudi,发展最早,服务生态齐全,但是参数很多,开发要求较高,维护性差,面向批处理
- Iceberg,表简单,没有很多表引擎,主要面向离线生态,对实时的更新很慢
- Paimon,实时很快,流批一体
四、Paimon的好处
解决Kafka不可查的问题:以前使用Kafka做中间件来进行流处理,但是kafka是不可查的,所以最后还需要一个可以查询的引擎,比如把数据写入StarRocks上进行查询。但是Paimon作为一个湖格式,可以批写批读,也可以流写流读,它把整条streaming链路建立起来,每一层都是事实可查的,架构能够完全实现流批一体。
支持更新的数据入湖: 通过FlinkCDC,可以一键摄取整个数据库,引入数据湖,大大降低了架构的复杂性,同时还提供灵活的更新选项,允许应用特定列或不用类型的聚合更新。
参考文章:
流数据湖平台Apache Paimon(一)概述-阿里云开发者社区
Apache PAIMON:实时数据湖技术框架及其实践
【全网首发】Apache Paimon大厂面试必备系列-基础篇
Apache Paimon大厂面试题必备-进阶篇(一)
Paimon助力数据湖仓架构实时化升级-阿里云开发者社区
Flink+Paimon实时数据湖仓实践分享-CSDN博客
数据湖Iceberg、Hudi和Paimon比较_apache paimon-CSDN博客