参考:Apache PAIMON:实时数据湖技术框架及其实践
数据湖不仅仅是一个存储不同类数据的技术手段,更是提高数据分析效率、支持数据驱动决策、加速AI发展的基础设施。
新一代实时数据湖技术,Apache PAIMON兼容Apache Flink、Spark等主流计算引擎,并支持流批一体化处理、快速查询和性能优化,成为加速AI转型的重要工具。
Apache PAIMON是一个支持大规模实时数据更新的存储和分析系统,通过 LSM 树(日志结构合并树)和列式存储格式(如 ORC/Parquet)实现高效查询。它与 Flink 深度集成,可整合 Kafka、日志、业务数据库的变更数据,支持批流一体处理,实现低延迟、实时更新和快速查询。
相比其他数据湖框架(如 Apache Iceberg 和 Delta Lake),PAIMON独特地提供了对批流一体化的原生支持,不仅能高效处理批量数据,还能对变更数据(如 CDC)实时响应。它也兼容多种分布式存储系统(如 OSS、S3、HDFS),并集成了 OLAP 工具(如 Spark、StarRocks、Doris),确保安全存储与高效读取,为企业的快速决策和数据分析提供灵活支持。
PAIMON主要技术场景
1. Flink CDC 将数据引入数据湖
PAIMON经过优化,使这个过程更简单、更高效。通过一键摄取,便可将整个数据库引入数据湖,从而大大降低架构的复杂性。它支持实时更新和低成本快速查询。此外,它还提供灵活的更新选项,允许应用特定列或不同类型的聚合更新。
2. 构建流式数据管道
PAIMON可用于构建完整的流式数据管道,其主要功能包括:
生成ChangeLog,允许流式读取访问完全更新的记录,从而更轻松地构建强大的流式数据管道。
PAIMON也正在发展为具有消费者机制的消息队列。最新版本引入了变更日志的生命周期管理,可让用户定义它们的保留时间,类似于 Kafka(例如,日志可以存储七天或更长时间)。这创建了一个轻量级、低成本的流媒体管道解决方案。
3. 超快速 OLAP 查询
虽然前两个用例可确保实时数据流,但 PAIMON还支持高速 OLAP 查询来分析存储的数据。通过结合LSM和Index,PAIMON 可以实现快速数据分析。其生态系统支持Flink、Spark、StarRocks、Trino等多种查询引擎,都可以高效查询PAIMON中存储的数据。
参考:Paimon助力数据湖仓架构实时化升级-阿里云开发者社区
数据架构的存储演进
Data LakeHouse是Lake到Warehouse的完美结合。它的基本含义是一个文件或者对象存储,可以存储任何你想要的任何东西。包括结构化数据、非结构化数据,json,其中非结构化数据包括图片、视频、音频之类的数据,Data Lake是一个非常通用的、非常粗糙的、非常底层的底层存储。
近几年诞生湖格式的东西,包括Iceberg、Hudi、Delta湖格式的东西,它通过文件的重新定义,把文件管理起来,管理的就不仅是一个目录,它管目录下每一个文件,它通过slap sort、manifest file的机制把每个文件的引用管理起来,这张表就具有版本的效果,也具有更细粒度控制的效果。
举例说明,把文件管起来之后ACID的能力,可以避免类似的目录,也可以有一些基于文件的data skipping的,也可以支撑delete update merge into细粒度的操作。最后也可以支持时间旅行包括回滚、Branch, Tag的能力。
Paimon实时数据湖
Paimon实时数据湖的出发点是Streaming加实时。数据湖格式上做Streaming的处理,Hive公开的每个引擎都能进行读写格式,它是一个非常open的格式,这里把它叫做shared database storage for batch processing。在批处理上一个被所有计算引擎share的格式,Iceberg 包括Hudi ,Delta在Hive的基础上演化出来的更进一步的ACID的处理,这里把Iceberg叫做shared databasestorage for batch processing,像数据仓库更像数据库的存储,有更进一步的能力。
Paimon出发点是在Iceberg基础上这些东西还不够,最大能给业务带来效果的是streaming,是实时化,是时效性。所以Paimon不仅是batch processing包括batch processing, streaming procession,olap processing,所以它是结合湖格式加LSM技术,把时效性带到数据湖。
Paimon的生态体系结构已经非常的广,底下基于HDVS,OSS或者stream的存储介质。在上面基于文件的格式ORC,包括阿里的ORC,parquet。左边是CDCingest各种数据源入湖到Paimon中。右边是它支持各种各样的sacred query的computer engine,包括Flink流的,Flink包括批的Spark StarRocks,包括一系列的社区的计算引擎,最新的版本也提出Paimon Python API,通过Paimon Python API解锁机器学习,来自包括rag,Python一系列的生态,包括通过error格式的转换。支撑包括pandas之类的计算框架。
Paimon最开始的名字叫Flink Table store。Paimon不仅是一个Flink存储,它是一个通用,公开,被共享的湖格式。对接的包括Flink流计算Spark StarRocks等一系列的引擎,预计在11月份发布1.0版本,预计Paimon在批,在流,在Olap已经达到非常完善的程度,在1.0当中会引入来自AI相关的集成,让Paimon成为真正能处理非结构化数据的数据湖格式。
最新Paimon发布0.9版本是一个功能非常完善的一个版本,补充完善有缺陷的futures,并且核心增强了包括victor ,组件化letive的查询对接来自StarRocks的C++的查询,也兼容Spark生态,可以通过Spark生态查询Paimon的数据,最后优化对象存储的文件,包括文件缓存 文件格式
数据湖实时流式处理
实时流式处理让业务的时效性加强,从天级的时效性降低到分钟级。基于Paimon数据湖的VP的处理,成本不会增加特别多。成本可控的情况下,时效性增加,时延降低,整体呈现出一套批流完全一体的存储计算架构。以前用Kafka中间来做流处理,因为Kafka不可查,所以anyway最后需要可以查询的引擎,比如需要把数据写到StarRocks上,StarRocks才可查。Paimon作为一个湖格式,它是可以批写批读,也可以流写流读,它把整条streaming链路建立起来,每一层都实时可查。架构能做到完全的流批一体,不是流批割裂的两套架构。
Paimon的能力有三个,第一个是它可以支持更新的数据入湖。第二个特性是能流读流写。流读流写不是简单的把数据流读流写,可以给Paimon声明一张图组件表,组件表就可以表现的像MYSQL,也可以实时的流式的更新数据,组件表也能实时的产生Change log给下游的消费,能做到非常准确的类似number架构,CPA架构。因为它是基于存储来产生Change log,它能做到最正确的计算,所以在很多场景当中,它能做到流一份数据沉淀下来,不用批写批读,做批的刷新。最后一个场景是每一层都是可以被包括StarRocks包括Spark引擎实时查询。Paimon针对这些引擎做非常多的优化,能保证查询性能不弱于正常的批查询。
第一个场景就数据库CDC入湖,可以通过Flink CDC,各种connector包括mysql CDC包括mongo DB的CDC包括OCEANBASE一系列的CDC的能力。用Paimon包括社区Paimon提供的Paimon CDC的入湖方式,可以用最新的一个Flink CDC 3.1基于young的入湖方式定义数据集成的数据传输的脚本链路。schema evolution ,schema跟着变来自源头的数据schema变,下面的Paimon表的schema也跟着变,也可以用类似整库同步的能力进一步节省资源,降低运维难度。
第二个是湖上的全链路流式ETL,定义Paimon的merge engine,可以定义partial-update,也可以定义Aggregation的merge engine。基于把计算存入到存储的技术,也可以通过Paimon取代类似join的部分列更新,也可以基于Paimon定义聚合表,整体写入Paimon后定义Paimon merge engine,之后也可以定义Change log producer让Paimon表实时的产生Change log,但是产生的Change log是需要不小的代价。
最后是湖上的Olap的加速,分为两个部分,第一个部分是实时数据的Olap。可以定义一个组件表,它接受上游数据的实时更新。实时更新的过程当中,可以通过StarRocks类似的引擎实时的查询,所以在社区推出一个组件表的deletion victor模式,基于deletion victor模式,它可以让存储本身和c++向量化更好的集成,可以让查询性能得到数倍的提升。离线数据直接Olap,可能会扫描全表的数据,Paimon也支持对离线数据做z-order排序。做z-order排序之后,在查询的时候就可以基于排序的range过滤大量的文件,Paimon在社区有文件索引。通用文件索引支持Bloom Filter,也支持最新的Bitmap进一步过滤不需要的文件。加强Olap的性能。
数据湖非结构化处理
接触到数据湖格式之后,会发现数据湖是一个结构化的处理,它是一个表,需要定义字段。Paimon在最新的版本当中也会推出Paimon object Table,希望通过Object Table管理非简化的数据,包括在OOS或者HDFS上的图片,视频,文件,音频之类的文件。Object Table方式通过一个视图,不操作这些文件,相当于是在后台建立文件的索引。把这些文件的原数据写到数据湖当中,通过这样的结构化视图就可以查询到Object Table,对一个目录或者多个目录的原数据的映射。拿到这些原数据之后就可以通过包括pySpark ,Flink SQL ,Spark SQL 等,通过这种结构化的处理,读表知道有哪些文件,这些文件的文件大小可以做一些过滤,也可以把这些文件读出来做一些处理,所以通过这样的方式把非结构化和结构化的SQL的处理,或者结构化的计算引擎的处理结合到一起,让整个结构化的处理更简单。可以把这些非结构化的数据通过结构化的方式管理起来,包括权限管理对接到正常的数仓的权限管理当中。
在Flink当中,在SQL当中也支持Model的一些处理,包括Model的预测,案例是假如根据training数据训练出Model,可以在Flink SQL中定义Model,然后也可以在SQL中定义Object Table映射到目录中的文件,通过纯SQL的调用,通过Model预测针对object数据做预测,通过纯SQL的方式产出一个模型预测数据处理的效果。通过Paimon的object table的方式可以把这套体系融入到SQL的处理当中,融入到传统的大数据计算的分布式处理当中,是案例的简单的SQL处理,可以create Model,create object table,通过predict模型预测的函数,做模型的预测处理。
Paimon可以管Model,包括非结构化数据。SQL的结构化处理模型预测也可以得到结果,整个非结构化数据得到数据版本和管理,从而可以得到学员的依赖管理。也可以把结果数据和其他结构化数据进行join,以及进行联合的计算。
参考:Flink+Paimon实时数据湖仓实践分享-CSDN博客
在 Flink 实时数据开发中,对于依赖大量状态 state 的场景,如长周期的累加指标计算、回撤长历史数据并更新等,使用实时数仓作为中间存储来代替 Flink 的内部状态 state 是非常有必要的。
Apache Paimon是一种流批统一的数据湖存储格式,结合 Flink 可以构建流批处理的实时湖仓一体架构。Paimon 具有实时更新的能力(可应用于对时效性要求不太高的场景,如 1-5 分钟),其主键表支持大规模更新写入,具有非常高的更新性能,同时也支持定义合并引擎,按照自定义的方式更新记录。
Paimon 底层使用 OSS/HDFS 等作为存储,同时数据文件以 LSMtree 的格式进行组织,具有更优的实时数据更新能力和完整的流处理能力。
对象存储服务(Object Storage Service)它是一种海量、安全、低成本、高可靠的云存储服务。适用于存储各种类型的非结构化数据,比如图片、视频、文档等。
1. 低成本、可扩展性:实时数仓产品也可以作为 flink 的中间存储,比如 hologres,但是 Paimon 的存储成本约为其的 1/9(通过查询官网,OSS 的存储为 0.12 元/GB/月,Hologres 为 1 元/GB/月)。同时数据湖相比于数据仓库可以与更多的大数据引擎(Hive/Spark/Trino 等等)兼容,解决数据孤岛和数据冗余存储的问题。
2. 实时性能:相比于其他的数据湖产品,Paimon 是天然面向 Flink 设计而诞生的,相比于 hudi(面向 Spark 批处理设计)、Iceberg 等,Paimon在与 Flink 结合具有更优的处理大批量数据的 upsert 能力,同时数据更新时效性最短可支持到 1 分钟,且性能稳定。
使用 Paimon 作为中间存储进行维表 JOIN,可以解决 Flink 内部状态 state 成本高、不可重启、存储周期短等限制,从而满足复杂实时场景的数据开发需求,同时这些中间存储结果也可以通过流/批的形式被 ODPS/Hologres 等大数据引擎消费,实现数据统一