更新时间:2026-10-09 GMT+08:00
分享

Paimon功能介绍

Apache Paimon是面向流式数据处理和湖仓一体架构设计的开源数据湖存储系统。它将数据湖的低成本、开放存储能力与数据库的实时更新、事务一致性能力结合起来,适用于实时数仓、离线数仓以及流批一体等场景。

Paimon采用类似LSM-Tree的存储结构,支持高吞吐写入、主键更新、删除、局部更新和数据合并。数据写入后通过快照、Manifest和数据文件进行组织,每次提交都会生成一个一致性快照,从而实现原子提交、版本管理、时间旅行和故障恢复。对于主键表,Paimon能够根据主键合并多次变更,适合处理数据库CDC数据,并可直接构建实时更新的数据湖表。

Paimon支持以下功能:

  • 流批一体写入:支持Flink流式持续写入和Spark批量写入,一份数据同时服务流式和批量计算场景。
  • 主键表实时更新:基于LSM-Tree结构支持按主键的插入、更新和删除,适合CDC数据接入和实时聚合。
  • Append-Only表:不支持主键的纯追加表,适用于日志、事件流等无需更新的场景,写入性能更高。
  • 时间旅行:通过快照机制支持查询历史版本数据,可用于数据审计、回溯对比和故障恢复。
  • Schema演进:支持加列、删列、重命名、类型变更等Schema变更操作,无需重写数据文件。
  • Compaction:将小文件合并为大文件,优化查询性能和存储效率,支持同步和异步两种模式。
  • Changelog Producer:支持从Paimon表直接产出变更日志,下游可订阅增量数据进行流式处理。
  • Tag与Branch:支持为表快照创建标签和分支,便于版本管理和数据回滚。

主要特点

  • 流批一体:同一份数据同时支持流式读取和批量查询,无需维护两套数据链路。
  • 高吞吐写入:基于LSM-Tree的写入路径优化,支持百万级TPS的数据写入场景。
  • 实时更新:主键表支持按主键的更新和删除操作,满足实时数仓的数据变更需求。
  • 开放生态:与Flink深度集成,同时支持Spark计算引擎。
  • 事务一致性:每次提交生成一致性快照,提供ACID事务保证,支持并发读写的隔离。
  • 低成本存储:底层基于HDFS或对象存储,结合列式存储格式,兼顾低成本和高性能。

基本概念

  • Table(表):Paimon表是数据的基本组织单元,包含Schema、分区策略、主键定义和属性配置等信息。分为Append-Only表和主键表两种类型。
  • Snapshot(快照):表在某一时间点的一致性视图,每次提交生成一个快照,是时间旅行和并发控制的基础。
  • Schema(表结构):描述表的字段定义、数据类型和字段ID。Paimon通过字段ID实现Schema演进后的数据兼容。
  • Manifest(清单):记录数据文件的元数据信息,包括文件路径、分区值、行数和列统计信息,用于查询时过滤和扫描规划。
  • Data File(数据文件):实际存储数据的文件,默认使用ORC或Parquet列式格式。
  • Changelog(变更日志):记录表中数据变更的信息,通过Changelog Producer机制生成,供下游流式消费。
  • Commit(提交):将数据变更原子性地写入到表中,生成新快照的操作。Paimon采用乐观并发控制处理并发提交。

文件组织方式

Paimon将数据分为元数据管理层和数据存储层。

  • 元数据管理层:
    • Snapshot文件:为JSON格式,存储当前快照信息,包括Schema、分区规范、所有Manifest文件引用以及上一次快照的引用,每次commit生成一个新快照文件。
    • Manifest文件:为Avro格式,存储数据文件的清单列表,每行记录一个数据文件的详细描述,包括文件路径、分区值、文件大小、行数以及列级别的统计信息(最大最小值、空值数等),用于查询时过滤不必要的文件。
    • Manifest List文件:为Avro格式,一次commit生成一个清单列表文件,存储该次提交涉及的Manifest文件路径和分区范围信息。
  • 数据存储层:默认为ORC或Parquet列式文件格式。

相关文档