Apache PAIMON 学习

参考: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 等大数据引擎消费,实现数据统一

相关推荐
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码5 天前
嵌入式学习路线
学习
毛小茛5 天前
计算机系统概论——校验码
学习
babe小鑫5 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms5 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下5 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。5 天前
2026.2.25监控学习
学习
im_AMBER5 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J5 天前
从“Hello World“ 开始 C++
c语言·c++·学习