在这里插入图片描述

1.概述

Apache Paimon 原名 Flink Table Store(简称FTS),是Flink 子项目,2023年3月12日进入ASF化器,改名 Apache Paimon。

Apache Paimon是一个流数据湖平台,支持 Streaming 实时计算能力和 Lakehouse 新架构优势,支持高速数据摄取、变更日志跟踪和高效的实时分析的能力,提供统一存储的能力。

  • 统一的流处理或者批处理
  • 数据湖能力
  • 支持各种引擎
  • 变更日志的生成
  • 丰富的表类型

在这里插入图片描述
Flink 社区希望能够将 Flink 的Streaming 实时计算能力和 Lalkehouse 新架构优势进一步结合,推出新一代的 Streaming Lakehouse 技术,促进数据在数据湖上真正实时流动起来,并为用户提供实时离线一体化的开发体验。Flink 社区内部孵化了 Flink Table Store (简称 FTS)子项目,一个真正面向 Streaming 以及 Realrime 的数据湖存储项目。2023年月12日,FTS 进入 Apache 软件基金会 (ASF)的孵化器,改名为 Apache Paimon (incubating)。

Apache Paimon 是一个流数据湖平台,具有高速数据摄取、变更日志跟踪和高效的实时分析能力。

在这里插入图片描述
1)读写:Paimon 支持到种读专数据和执行 OLAP直询的方式。

  • 对于读取,亡文持以下方式消费数据:
  • 从历史快照(批处理模式),
  • 从最新的偏移量(在流模式下),或
  • 以混合方式读取增量快照。。

2)对于写入,它支持来自数据库变更日志(CDC)的流式同步或来自离线数据的批量插入和覆盖。

1.2.生态系统

除了 Apache Flink 之外,Paimon 还支持 Apache Hive、Apache Spark、Trino 等其他计算引擎的读取。

1.3 内部

在底层,Paimon 将列式文件存储在文件系统/对象存储上,并使用 ISM 树结构来支持大量数据更新和高性能查询。

1.4 统一存储

对于 Apache Flink 这样的流引擎,通常有三种类型的连接器:。

消息队列:例如 Apache Katka,在源阶段和中间阶段都使用它,以保证延迟保持在秒级。

OLAP 系统:例如 Clickhouse,它以流方式接收处理后的数据并为用户的即席查询提供服务。

批量存储:例如 Apache Hive,它支持传统批处理的各种操作,包括 INSERT、OVERWRITE. +

Paimon 提供表抽象。它的使用方式与传统数据库没有什么区别:

在批处理执行模式下,它就像一个Hive 表,支持 Batch sQL 的各种操作。查询它以查看最新的快照。。

在流执行模式下,它的作用就像一个消息队列。查询它的行为就像从历史数据永不过期的消息队列中查询流更改日志。

2.核心特性

1.统一批处理和流处理

批量写入和读取、流式更新、变更耳志生成,全部文持。

2. 数据湖能力

低成本、高可靠性、可扩展的元数据。 Apache Paimon 具有作为数据湖存储的所有优势。

3. 各种合并引擎~
按照您喜欢的方式更新记录。保留最后一条记录、进行部分更新或将记录聚合在一起,

4. 变更日志生成

Apache Paimon 可以从任何数据源生成正确且完整的变更日志,从而简化您的流分析。

5.丰富的表类型

除了主键表之外,Apache Paimon 还支持 append-only 表,提供有序的流式读取来替代消息队列。

5.模式演化

Apache Paimon 支持完整的模式演化。您可以重命名列并重新排序。

3.基本概念

3.1 Snapshots

快照捕获表在某个时间点的状态。用户可以通过最新的快照来访问表的最新数据。通过时间旅行,用户还可以通过较早的快照访问表的先前状态。

3.2 Partition

Paimon 采用与 Apache Hive 相同的分区概念米分离数据。

分区是一种可选方法,可根据日期、城市和部门等特定列的值将表划分为相关部分。每个表可以有一个或名个分区键来标识特定分区

通过分区,用户可以高效地操作表中的一片记录。

如果定义了主键,则分区键必须是主键的子集。

3.3 Bucket

未分区表或分区表中的分区被细分为存储桶,以便为可用于更有效查询的数据提供额外的结构。

桶的范围由记录中的一列或多列的哈希值确定。用户可以通过提供 bucket-key 选项来指定分桶列。如果未指定 bucket-key 选项,则主键(如果已定义)或完整记录将用作存储桶键。

桶是读写的最小存储单元,因此桶的数量限制了最大处理并行度。不过这个数字不应该太大,因为它会导致大量小文件和低读取性能。

一般来说,建议每个桶的数据大小为 1GB 左右。

3.4 一致性保证

Paimon 编写器使用两阶段提交协议以原子方式将一批记录提交到表中。每次提交在提交时最多生成两个快照。

对于任意两个同时修改表的写入者,只要他们不修改同一个存储桶,他们的提交都是可序列化的。如果他们修改同一个存储桶,则仅保证快照隔离。也就是说,最终表状态可能是两次提交的混合,但不会丢失任何更改。

4. 文件布局

一张表的所有文件都存储在一个基本月录下。Paimon 文件以分层方式组织。下图说明了文件布局。从快照文件开始,Paimon 读者可以递归地访问表中的所有记录。

在这里插入图片描述
下而简单介绍文华布局(不同操作对应文化如何变化,学习完Flink 基本操作后再來理解,2.10进行分析)

4.2 Snapshot Files

所有快照文件都存储在快照目录中。

快照文件是一个JSON 文件,包含有关此快照的信息,包括:

正在使用的 Sclena 文件
包含此快照的所有灭改的清单列表(manifest list )

4.2 Manifest Files

所有清单列表(manifest list)和清单文件 (manifest file)都存储在清单(manifest)目录中。

清单列表(manifest list)是清单文件名(manifest file)的列表。

清单文件(manifest file)是包含有关 LSM 数据文件和更改日志文件的文件信息。例如对应快照中创建了哪个LSM 数据文件、删除了哪个文件。

4.3 Data Files

数据文件按分区和存储桶分组。每个存储桶目录都包含一个ISM 树及其变更日志文件。目前,Paimon 支持使用 orc(默认)、parquet 和avro 作为数据文件格式。

4.4 LSM Trees

Paimon 采用 ISM 树(日志结构合并树)作为文件存储的数据结构。

4.5 Sorted Runs

LSM 树将文件组织成多个 Sorted Run。 Sorted Run 由一个或多个数据文件组成,并且每个数据文件恰好属于一个 Sorted Run。

数据文件中的记录按其主键排序。在 Sorted Run 中,数据文件的主键范国永远不会重叠。

在这里插入图片描述
正如您所看到的,不同的 Sorted Run 可能具有重卺的主键范围,甚至可能包含相同的主键。查询LSM 树时,必须合并所有 Sorted Run,并且必须根据用户指定的合并引擎和每条记录的时间戳来合并具有相同主键的所有记录。。

写入LSM树的新记录将首先缓存在内存中。当内存缓冲区满时,内存中的所有记录将被排序并刷新到磁盘。现在己创建新的 Sorted Run.

4.6 Compaction

当越米越多的记录写入ISM 树时,Sorted Run 的数量将会增加。由于查询LSM 树需要将所有 Sorted Run 合并起来,太多 Sorted Run 将导致查询性能较差,甚至内存不足。"

为了限制 Sorted Run 的数量,我们必须偶尔将多个Sorted Run 合并为一个大的 SortedRun。这个过程称为 Compaction。

然而,Conpaction 是一个资源密集型过程,会消耗一定的 CPU 时问和磁盘IO,因此过于频繁的 Compaction 可能会导致写入速度变慢。这是查询和写入性能之间的权衡。Paimon目前采用了类似于 Rocksdb 通用压缩的 Compaction 策略。

默认情况下,当Paimon 将记录追加到ISM 树时,它也会根据需要执行 Compaction。用户还可以选择在 “专用 Compaction 作业” 中独立执行所有 Compaction。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐