概述
Apache Paimon 架构:
如上图所示:
读/写:Paimon支持一种多功能的方式来读/写数据和执行OLAP查询。
对于读操作,它支持消费数据
- 从历史快照(批处理模式)中
- 从最新偏移量(在流模式下)开始
- 以混合方式读取增量快照
对于写入,它支持
- 从数据库变更日志(CDC)流式同步
- 从离线数据批量插入/覆盖
生态系统:除了Apache Flink之外,Paimon还支持Apache Hive、Apache Spark和Trino等其他计算引擎的读取。
内部:
- Paimon将列式文件存储在文件系统/对象存储上
- 文件的元数据保存在清单文件中,提供大规模存储和数据跳过
- 对于主键表,使用LSM树结构来支持大量的数据更新和高性能查询。
统一存储
对于像Apache Flink这样的流媒体引擎,通常有三种类型的连接器:
- 消息队列,如Apache Kafka,用于此管道的源和中间阶段,以保证延迟保证在几秒钟内。
- OLAP系统,如ClickHouse,它以流媒体方式接收处理的数据,并提供用户的临时查询。
- 批处理存储,如Apache Hive,它支持传统批处理的各种操作,包括INSERT OVERWRITE.
Paimon提供表抽象,它的使用方式与传统数据库没有区别:
- 在批处理模式下,它就像Hive表一样。并支持批处理SQL的各种操作,查询它以查询最新的快照。
- 在流处理模式下,它就像消息队列一样。查询它的作用就像从消息队列中查询流变更日志,其中历史数据永远不会过期。
基本概念
文件布局
表中的所有文件都存储在一个基础目录中,Paimon文件以分层风格组织。下图说明了文件布局,从快照文件开始,Paimon读者可以递归地访问表中的所有记录。
快照
所有的快照文件存储在snapshot目录。
快照文件是一个JSON文件,其中包含有关此快照的信息,包括:
- 使用的模式文件
- 包含此快照所有变更的清单列表
快照捕获表在某个时间点的状态,用户可以通过最新快照访问表的最新数据,通过时间旅行,用户还可以通过早期快照访问表的先前状态。
清单文件
所有清单列表和清单文件存储在manifest目录。
清单列表是清单文件名的列表。
清单文件是包含有关LSM数据文件和变更日志文件的变更的文件,例如,在相应的快照中创建了哪些LSM数据文件,删除了哪个文件。
数据文件
数据文件按分区分组。目前,Paimon支持使用parquet(默认)、orc和avro作为数据文件的格式。
分区
Paimon采用与Apache Hive相同的分区概念来分离数据。
分区是一种可选方法,根据日期、城市、和部门等特定列的值将表划分为相关部分,每个表可以有一个或多个分区键来标识特定分区。
通过分区,用户可以有效的操作表中的一片记录。
一致性保证
Paimon使用两阶段提交协议以原子方式将一批记录提交到表中。每次提交在提交时最多产生两个快照,这取决于增量写入和压缩策略,如果只执行增量写入而不触发压缩操作,则只会创建增量快照。如果触发压缩操作,将创建增量快照和压缩快照。
对于任何两个同时修改表的操作,只要他们不修改同一分区,他们的提交可以并行进行。如果他们修改了相同的分区,则只能保证快照隔离。也就是说,最终表状态可能是两个提交的混合,但不会丢失任何更改。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。