Paimon底层存储数据结构和架构原理以及tag功能和paimon入门实例

流式数据湖存储技术,Apache Paimon是什么? 是一项流式数据湖存储技术,可以为用户提供高吞吐、低延迟的数据摄入、流式订阅以及实时查询能力。Paimon 采用开放的数据格式和技术理念,可以与 Apache Flink / Spark / Trino 等诸多业界主流计算引擎进行对接,共同推进 Streaming Lakehouse 架构的普及和发展。 阅读详情

Apache Paimon

1. Paimon 概述

1.1 什么是 Apache Paimon?

Apache Paimon 是一个开源的流式数据湖存储系统,专门为实时数据处理而设计。它结合了数据湖的灵活性和数据仓库的性能,为现代大数据应用提供了一个统一的存储解决方案。

Apache Paimon 的架构(来自官网):

如上图所示架构:

读/写: Paimon 支持多种数据读/写方式和 OLAP 查询。

  • 对于读取操作,它支持数据消费。
    • 从历史快照(批量模式)
    • 从最新的偏移量(在流媒体模式下)开始,或者
    • 以混合方式读取增量快照。
  • 对于写入操作,它支持
    • 从数据库变更日志(CDC)进行流式同步
    • 从离线数据批量插入/覆盖数据。

**生态系统:**除了 Apache Flink 之外,Paimon 还支持被其他计算引擎读取,如 Apache Hive、Apache Spark 和 Trino。

内部的:

  • 在底层,Paimon 将列式文件存储在文件系统/对象存储中。
  • 文件的元数据保存在清单文件中,提供大规模存储和数据跳过功能。
  • 对于主键表,使用 LSM 树结构来支持大量数据更新和高性能查询。
1.1.1 Paimon 的核心价值

对于初学者来说,Paimon 解决了以下关键问题:

  1. 实时数据处理:传统数据湖(如Hive)主要面向批处理,而Paimon支持实时数据流处理
  2. 简化查询:无需编写复杂的SQL窗口函数即可查询最新数据
  3. 版本控制:内置类似Git的版本管理功能,支持数据回滚和时间旅行
  4. 统一存储:同一份数据同时支持流处理和批处理

统一存储 (https://paimon.apache.org/docs/1.0/concepts/overview/#unified-storage)

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

  • 消息队列(例如 Apache Kafka)在本管道的源阶段和中间阶段均有使用,以保证延迟保持在几秒以内。
  • OLAP 系统(例如 ClickHouse)以流式方式接收处理后的数据,并响应用户的临时查询。
  • 批量存储,例如 Apache Hive,支持传统批量处理的各种操作,包括INSERT OVERWRITE:

Paimon 提供表抽象功能。它的使用方式与传统数据库并无二致:

  • 在batch执行模式下,它就像一个 Hive 表,支持各种批量 SQL 操作。查询该表即可查看最新快照。
  • 在streaming执行模式下,它就像一个消息队列。查询模式下,它就像从消息队列中查询流式变更日志,其中历史数据永不过期。
1.1.2 Paimon 与传统数据湖的对比
特性传统数据湖(Hive)Apache Paimon
数据处理模式批处理为主流批一体
实时性延迟较高(小时/天级)低延迟(秒/分钟级)
查询复杂度需要复杂SQL窗口函数直接查询最新数据
版本管理需要外部工具内置Tag和快照机制
存储效率中等高(LSM树优化)

1.2 为什么选择 Paimon?

1.2.1 适用场景

Paimon 特别适合以下应用场景:

  • 实时报表系统:需要分钟级甚至秒级更新的业务报表
  • 实时监控平台:业务指标的实时计算和展示
  • 推荐系统:基于最新用户行为的实时推荐
  • 数据质量监控:实时检测数据质量问题
  • 数据审计追踪:完整的数据变更历史记录
1.2.2 技术优势
  1. 高性能写入:基于LSM树结构,支持高吞吐数据摄入
  2. 高效查询:快照机制直接定位最新数据,避免全表扫描
  3. 灵活扩展:支持水平扩展,适应大数据量场景
  4. 生态兼容:与Flink、Spark等大数据框架深度集成

2. Paimon与传统数据仓库hive的区别

2.1 基础概念

2.1.1 数据湖 vs 数据仓库

数据湖:存储原始数据的存储库,支持各种格式的数据,适合探索性分析
数据仓库:结构化数据的存储系统,适合报表和BI分析
Paimon:结合了两者的优势,既支持灵活的数据格式,又提供高性能的查询能力

2.1.2 流处理 vs 批处理

批处理:处理一批静态数据,如夜间ETL作业
流处理:实时处理连续的数据流,如实时监控
Paimon:支持两种处理模式,实现流批一体

3. Paimon 存储文件结构

3.1 整体文件布局

Apache Paimon 采用流式数据湖存储技术,基于 LSM(Log-Structured Merge-tree)树结构来存储数据,支持高吞吐、低延迟的数据摄入和实时查询。

在这里插入图片描述

Paimon 表的存储目录结构如下:

以前paimon版本(<0.7)
表根目录/
├── snapshot/           # 快照目录
│   ├── snapshot-1      # 快照文件
│   ├── snapshot-2
│   └── ...
├── manifest/           # 清单文件目录
│   ├── manifest-list-1 # 清单列表文件
│   └── ...
├── data/               # 数据文件目录
│   ├── bucket-0/       # 桶0的数据文件
│   ├── bucket-1/       # 桶1的数据文件
│   └── ...
├── metadata/           # 元数据目录
│   ├── schema/         # 表结构定义
│   ├── tags/           # 标签目录
│   └── ...
└── changelog/          # 变更日志目录(可选)


现在版本paimon1.0.1
tbl/
├── bucket-*/        ← 数据文件
├── manifest/        ← 元数据:文件清单
├── schema/          ← 元数据:表结构版本
├── snapshot/        ← 元数据:快照指针
├── index/           ← 可选索引文件
└── tag/             ← 可选永保别名
Manifest文件(数据文件的清单):

Manifest文件是Paimon用来存储元数据信息的文件,记录了数据文件的路径、分区信息、增量变更(添加或删除)、行数等。它是Paimon元数据管理的核心组件。

清单文件记录了数据文件的元数据信息,包括:

  • 数据文件路径
  • 数据统计信息(最小值、最大值等)
  • 文件大小和记录数
  • 数据文件的状态(新增、删除、修改)

在这里插入图片描述

Manifest-list文件(Manifest 的清单):

Manifest-list是一组manifest文件名的列表,用于组织和管理多个manifest文件。它充当了快照与具体manifest文件之间的桥梁。

在这里插入图片描述

Paimon中的Manifest-list分为三种类型:

  1. baseManifestList(基础清单列表)
    • 记录来自之前快照的所有变更
    • 包含历史累积的manifest文件引用
  2. deltaManifestList(增量清单列表)
    • 记录当前快照中发生的新变更
    • 用于更快的过期和流式读取
  3. changelogManifestList(变更日志清单列表)
    • 记录快照中产生的变更日志
    • 为null表示没有变更日志或paimon版本≤0.2
特性Manifest 文件Manifest-list 文件
作用记录一个 bucket 的数据文件变更记录一次快照涉及的所有 Manifest 文件
内容数据文件路径、统计信息、状态Manifest 文件路径、分区、bucket、统计信息
粒度细粒度(bucket 级别)粗粒度(快照级别)
生成频率每次写入 bucket 有变更时每次提交(commit)时
是否被索引被 Manifest-list 索引被快照(snapshot)索引
索引(Index)文件的 Manifest

Paimon 0.8+ 支持次级索引(如 bloom-filter、hash-index、vector-index 等)。
写入数据时,同步或异步生成对应的 index file(通常以 .index 结尾)。
为了快照隔离、增量清理、快速读取,这些索引文件同样需要走 Manifest 机制 → 于是就有了 indexManifest。

项目普通 ManifestindexManifest
记录对象数据文件(.parquet)索引文件(.index)
文件前缀manifest-{uuid}-Nindex-manifest-{uuid}-N
内容字段file_path, rowCount, min/max 值…index_type, file_path, size, bloom_bits…
由谁生成Writer(commit)IndexWriter(commit 或 async)
由谁读取Scan / Compact / AuditIndexLookup / Compaction / Clean

在这里插入图片描述

Schema文件:

Schema文件是定义表结构信息的元数据文件,存储表的字段定义、分区键、主键等信息。

在这里插入图片描述

快照文件(Snapshot):

所有快照文件都存储在 snapshot 目录中。快照文件是一个 JSON 文件,包含以下信息

在这里插入图片描述

字段值含义
version3快照文件格式版本号(内部协议)
id1快照序号(=1,说明这是表的第 1 次提交)
schemaId9本次使用“编目规则 9 号”→ 去 schema/schema-9.json 看字段定义
baseManifestListmanifest-list-9dbcbe1e…‑0全量文件清单(首次提交时它就是全部)
deltaManifestListmanifest-list-9dbcbe1e…‑1增量文件清单(本次追加的新文件)
changelogManifestListnull没有产生行级变更日志(非流式更新)
commitUserbf11595c…谁提交的(Flink Job 或 Spark Application 的 UUID)
commitIdentifier9223372036854775807Long.MAX_VALUE → 批模式一次性提交
commitKindAPPEND本次只是追加,不是 COMPACT 或 OVERWRITE
timeMillis1763462586227提交瞬间的时间戳(毫秒)
totalRecordCount1整张表现在共 1 条记录
deltaRecordCount1本次追加了 1 条记录
watermark-9223372036854775808Long.MIN_VALUE → 无事件时间概念(批)

snapshot-1 ──schemaId─→ schema/schema-9.json
│
├─baseManifestList─→ manifest/manifest-list-9dbcbe1e…-0 (全量)
└─deltaManifestList─→ manifest/manifest-list-9dbcbe1e…-1 (增量)
│
▼
里面列出真正数据文件
bucket-0/data-xxxxx.parquet

tag文件:

在这里插入图片描述

字段值含义
version3文件格式协议号(内部协议)
id12被“裱”起来的快照序号
schemaId9用 9 号规则(schema/schema-9.json)解读数据
baseManifestList…-0全量文件清单(首次提交时的全部)
deltaManifestList…-1增量文件清单(本次追加部分)
changelogManifestList…-2有行级变更日志(流式更新产生)
indexManifestindex-manifest-…-9索引文件也有独立 manifest(建了 bloom/hash 等)
commitUser24cd1c85…提交者 UUID
commitIdentifier9223372036854775807批模式一次性提交
commitKindAPPEND只是追加,无覆盖
timeMillis1763467914504提交瞬间时间戳
totalRecordCount19整张表共 19 行
deltaRecordCount1本次追加 1 行
changelogRecordCount1变更日志里记录了 1 行(update/delete 明细)
watermark-9223372036854775808无事件时间
tagCreateTime2025-11-18 20:00:02.582打标签的瞬间(人眼可读)
tagTimeRetained31536000 s保质期 365 天(快照不会被后台清理)

4. Tag 功能详解

4.1 Tag 的概念

Tag 是 Paimon 中的一个重要功能,它允许用户为表的特定快照创建标签,类似于 Git 中的标签功能。

4.2 Tag 的创建与存储

4.2.1手动创建标签

创建 Tag 时,Paimon 会根据当前快照进行创建:

-- 创建 Tag
CALL sys.create_tag('dwd.source_migration_table', 'tag_10_12', 12, '365d');

-- 查看所有 Tag
SELECT * FROM `source_migration_table$tags`;

Tag 信息存储在表的元数据中,可以通过系统表 table$tags 进行查询。

在这里插入图片描述

4.2.2自动创建标签

Paimon支持在写作任务中自动创建标签。

步骤 1:选择创建模式

您可以通过表选项设置创建模式'tag.automatic-creation'。支持的值包括:

  • process-time根据机器运行时间创建标签。
  • watermark:根据 Sink 输入的水印创建标签。
  • batch在批量处理场景中,当前任务完成后会生成一个标签。

步骤二:选择创建周期

标签生成频率是多少?您可以选择 -1、-2``'daily'和'hourly'`` ‘two-hours’-3 'tag.creation-period'。

如果需要等待延迟数据,可以设置延迟时间:'tag.creation-delay'。

步骤 3:自动删除标签

您可以配置'tag.num-retained-max'或tag.default-time-retained自动删除标签。

例如,配置表格,使其每天 0:10 创建一个标签,最大保留时间为 3 个月:

-- Flink SQL
CREATE TABLE t (
    k INT PRIMARY KEY NOT ENFORCED,
    f0 INT,
    ...
) WITH (
    'tag.automatic-creation' = 'process-time',
    'tag.creation-period' = 'daily',
    'tag.creation-delay' = '10 m',
    'tag.num-retained-max' = '90'
);

INSERT INTO t SELECT ...;

-- Spark SQL

-- Read latest snapshot
SELECT * FROM t;

-- Read Tag snapshot
SELECT * FROM t VERSION AS OF '2023-07-26';

-- Read Incremental between Tags
SELECT * FROM paimon_incremental_query('t', '2023-07-25', '2023-07-26');

4.3 Tag 的功能与应用场景

查询tag对应快照版本的数据:

#查询标签数据必须在批模式下
SET execution.runtime-mode=BATCH;

#查询数据tag_10_12这个tag的数据
SELECT * FROM source_migration_table /*+ OPTIONS('scan.tag-name' = 'tag_10_12') */;

在这里插入图片描述

5. Paimon 与 Hive 查询最新数据对比

5.1 Hive 查询最新数据的传统方式

在 Hive 中,查询最新数据通常需要使用复杂的 SQL 技巧,例如:

-- Hive 查询最新分区数据的传统方式
SELECT COUNT(*) FROM 
( 
    SELECT partition_date, 
        ROW_NUMBER() OVER (PARTITION BY partition_date ORDER BY partition_date DESC) as rank_number 
    FROM dwd_core_enterprises_whitelist_info 
    WHERE partition_date > '2023-01-01' AND partition_date < '2023-12-31'
) a 
WHERE a.rank_number = 1;

Hive 方式的缺点:

  1. 查询复杂度高:需要编写复杂的窗口函数
  2. 性能开销大:需要对全表数据进行排序和分区
  3. 维护困难:SQL 语句难以理解和维护
  4. 实时性差:无法支持实时数据查询

5.2 Paimon 查询最新数据的优势

Paimon 通过快照机制提供了更简单、高效的查询方式:

-- Paimon 查询最新数据(默认行为)
SELECT COUNT(*) FROM dwd_core_enterprises_whitelist_info;

-- Paimon 查询特定时间点的数据(时间旅行)
SELECT COUNT(*) FROM dwd_core_enterprises_whitelist_info 
/*+ OPTIONS('scan.timestamp-millis'='1672531200000') */;

-- Paimon 通过 Tag 查询特定版本数据
SELECT COUNT(*) FROM dwd_core_enterprises_whitelist_info 
/*+ OPTIONS('scan.tag-name'='v1.0') */;

Paimon 方式的优势:

  1. 查询简单直观:无需复杂SQL,直接查询即可获得最新数据
  2. 高性能:利用快照机制直接定位最新数据
  3. 实时性支持:支持流式数据实时查询
  4. 版本控制:内置的时间旅行和Tag功能
  5. 一致性保证:快照机制确保查询结果的一致性

5.3 性能对比分析

特性HivePaimon
查询复杂度高(需要窗口函数)低(直接查询)
查询性能中等(全表扫描)高(快照定位)
实时性不支持支持
版本管理需要外部工具内置支持
数据一致性需要手动保证自动保证
存储效率中等高(LSM结构)

6. 存储效率与技术优势分析

6.1 存储效率优化机制

Paimon 通过多种机制优化存储效率:

6.1.1 数据压缩与合并
  • LSM 树合并操作:定期合并小文件,减少存储碎片
  • 列式存储压缩:Parquet/ORC 格式提供高效的列压缩
  • 增量存储:只存储变更数据,避免全量复制
6.1.2 快照存储优化
  • 共享引用:多个快照共享相同的数据文件引用
  • 增量快照:新快照只记录变更,不复制完整数据
  • 自动清理:过期快照和未被引用的文件自动清理

6.2 技术优势总结

6.2.1 与传统数据湖的对比优势
技术特性传统数据湖Paimon
存储结构文件列表LSM 树
写入性能中等高(顺序写入)
查询性能依赖文件扫描快照定位
实时能力有限完整支持
版本管理外部工具内置 Tag
存储效率中等高(压缩+合并)
6.2.2 架构创新点
  1. LSM 树应用:将 LSM 树引入数据湖存储,优化写入性能
  2. 快照机制:轻量级的快照管理,支持时间旅行查询
  3. Tag 系统:Git-like 的版本标签管理
  4. 流批一体:同一存储支持流处理和批处理

7. 实际应用场景

7.1 数据湖架构升级

从传统的 Hive 数据仓库升级到 Paimon 数据湖,可以显著提升:

  • 查询性能:快照机制减少数据扫描量
  • 开发效率:简化数据查询逻辑
  • 运维成本:自动化的快照和版本管理

7.2 实时数据分析

Paimon 支持流批一体架构,适用于:

  • 实时报表:分钟级甚至秒级的数据更新
  • 实时监控:业务指标的实时计算和展示
  • 实时推荐:基于最新用户行为的推荐系统

7.3 数据治理与合规

通过 Tag 和快照机制,Paimon 支持:

  • 数据审计:完整的数据变更历史记录
  • 合规检查:标记符合法规的数据版本
  • 数据质量:版本化的数据质量检查点

8. 总结

Apache Paimon 通过其创新的存储结构和快照机制,为大数据处理带来了革命性的改进:

8.1 核心技术优势

  1. 存储效率:LSM 树结构和数据压缩优化存储空间,快照存储不会翻倍增长
  2. 查询性能:快照机制显著提升查询效率,避免复杂 SQL
  3. 版本管理:Tag 功能提供灵活的数据版本控制
  4. 实时能力:支持流批一体的实时数据处理
  5. 架构创新:三层架构设计,与 Iceberg/Hudi/Delta 有明显区别

8.2 底层技术原理

  • LSM 树存储:基于日志结构合并树的存储架构
  • 快照机制:轻量级的版本管理,支持时间旅行
  • Tag 系统:Git-like 的标签管理,存储在 metadata 目录
  • 数据组织:基于哈希的分桶存储,优化查询性能

8.3 应用价值

对于需要处理大规模数据并追求实时性和查询性能的应用场景,Paimon 是一个值得考虑的优秀选择。特别是在以下场景下,Paimon 的优势尤为明显:

  • 频繁查询最新数据:相比 Hive 的复杂窗口函数,Paimon 提供直接查询
  • 时间旅行查询:内置支持历史数据查询
  • 严格版本控制:Tag 系统确保数据版本一致性
  • 实时数据处理:流批一体架构支持实时应用

Paimon 的创新存储架构和高效查询机制,为现代数据湖建设提供了强有力的技术支撑。

9. 初学者实践指南

9.1 快速开始:第一个Paimon项目

9.1.1 环境准备

系统要求:

  • Java 8 或更高版本
  • Apache Flink 1.14+(推荐)
  • Maven 或 Gradle 构建工具

依赖配置(Maven):

<dependency>
    <groupId>org.apache.paimon</groupId>
    <artifactId>paimon-flink</artifactId>
    <version>1.0.0</version>
</dependency>
9.1.2 创建第一个Paimon表

步骤1:定义表结构

-- 创建用户行为表
CREATE TABLE user_behavior (
    user_id BIGINT,
    behavior_type STRING,
    timestamp TIMESTAMP(3),
    item_id BIGINT,
    category_id BIGINT,
    WATERMARK FOR timestamp AS timestamp - INTERVAL '5' SECOND
) WITH (
    'connector' = 'paimon',
    'path' = 'file:///tmp/user_behavior',
    'auto-create' = 'true'
);

步骤2:插入测试数据

INSERT INTO user_behavior VALUES 
(1001, 'click', TIMESTAMP '2024-01-01 10:00:00', 2001, 3001),
(1001, 'buy', TIMESTAMP '2024-01-01 10:01:00', 2001, 3001),
(1002, 'click', TIMESTAMP '2024-01-01 10:02:00', 2002, 3002);

步骤3:查询数据

-- 查询最新数据
SELECT * FROM user_behavior;

-- 按用户分组统计
SELECT user_id, COUNT(*) as click_count 
FROM user_behavior 
WHERE behavior_type = 'click'
GROUP BY user_id;

9.2 常用操作示例

9.2.1 数据写入操作

批量写入示例:

// Java代码示例:批量写入Paimon表
TableEnvironment tableEnv = TableEnvironment.create(EnvironmentSettings.inStreamingMode());

// 创建Paimon表
tableEnv.executeSql("
    CREATE TABLE user_orders (
        order_id BIGINT,
        user_id BIGINT,
        amount DECIMAL(10,2),
        order_time TIMESTAMP(3)
    ) WITH (
        'connector' = 'paimon',
        'path' = 'file:///tmp/user_orders',
        'auto-create' = 'true'
    )
");

// 批量插入数据
tableEnv.executeSql("
    INSERT INTO user_orders VALUES
    (1, 1001, 99.99, TIMESTAMP '2024-01-01 09:00:00'),
    (2, 1002, 199.99, TIMESTAMP '2024-01-01 09:01:00'),
    (3, 1001, 49.99, TIMESTAMP '2024-01-01 09:02:00')
");

流式写入示例:

// 从Kafka流式写入Paimon
Table kafkaSource = tableEnv.from("kafka_source");
Table paimonSink = kafkaSource.select($("user_id"), $("behavior"), $("timestamp"));
paimonSink.executeInsert("user_behavior");
9.2.2 数据查询操作

时间旅行查询:

-- 查询1小时前的数据快照
SELECT * FROM user_behavior FOR SYSTEM_TIME AS OF TIMESTAMP '2024-01-01 09:00:00';

-- 查询特定标签版本的数据
SELECT * FROM user_behavior FOR SYSTEM_VERSION AS OF 'v1.0';

增量查询:

-- 查询最近5分钟的增量数据
SELECT * FROM user_behavior 
WHERE timestamp >= NOW() - INTERVAL '5' MINUTE;
9.2.3 表管理操作

创建标签:

-- 为当前快照创建标签
CALL sys.create_tag('user_behavior', 'v1.0', 'Initial version with user behavior data');

查看表信息:

-- 查看表结构
DESCRIBE user_behavior;

-- 查看快照历史
SELECT * FROM user_behavior$snapshots;

-- 查看标签信息
SELECT * FROM user_behavior$tags;

数据清理:

-- 清理过期快照(保留最近7天)
CALL sys.expire_snapshots('user_behavior', 7);

9.3 最佳实践建议

9.3.1 表设计最佳实践
  1. 合理设置桶数量:根据数据量设置合适的桶数(通常4-32个)
  2. 选择合适的主键:为频繁查询的字段设置主键
  3. 设置合理的分区:按时间或业务维度分区
  4. 配置适当的TTL:根据业务需求设置数据保留时间
9.3.2 性能优化建议
  1. 批量写入:尽量使用批量写入而非单条插入
  2. 预聚合:对统计类查询进行预聚合
  3. 索引优化:为查询条件字段创建合适的索引
  4. 内存调优:根据数据量调整内存配置
9.3.3 运维监控建议
  1. 监控快照数量:定期清理过期快照
  2. 监控存储空间:关注数据文件增长情况
  3. 备份重要标签:对重要版本创建标签备份
  4. 定期健康检查:检查表状态和性能指标

9.4 故障排除与常见问题

9.4.1 常见错误及解决方案

问题: 无法连接到Paimon表
解决方案:

  • 检查表路径是否正确
  • 确认表是否存在(auto-create设置为true)
  • 检查文件系统权限

问题: 查询速度慢
解决方案:

  • 检查是否设置了合适的主键
  • 考虑增加桶数量
  • 优化查询条件,避免全表扫描

问题: 存储空间增长过快
解决方案:

  • 设置合理的快照保留时间
  • 定期清理过期数据
  • 考虑数据压缩选项
9.4.2 调试技巧

日志分析:
启用详细日志来诊断问题:

# 在log4j.properties中设置
log4j.logger.org.apache.paimon=DEBUG

系统表查询:
使用系统表获取内部状态:

-- 查看表统计信息
SELECT * FROM user_behavior$schemas;
SELECT * FROM user_behavior$snapshots;
SELECT * FROM user_behavior$manifests;

性能分析:
使用EXPLAIN分析查询计划:

EXPLAIN PLAN FOR SELECT * FROM user_behavior WHERE user_id = 1001;

9.5 进阶学习资源

9.5.1 官方文档
数据湖存储解决方案之Paimon Flink 社区希望能够将 Flink 的 Streaming 实时计算能力和 Lakehouse 新架构优势进一步结合,推出新一代的 Streaming Lakehouse 技术,促进数据在数据湖上真正实时流动起来,并为用户提供实时离线一体化的开发体验。Flink 社区内部孵化了 Flink Table Store (简称 FTS )子项目,一个真正面向 Streaming 以及 Realtime的数据湖存储项目。 阅读详情

相关推荐

免费、开源:五分钟告诉你什么是Paimon

首先我们来看看Paimon的前世今生吧。Paimon原名是Flink Table Store(简称FTS),最初是Flink社区孵化的一个子项目,该项目的本意是想提供一个 Flink 完全内置的存储,解决实时、近实时、Queue、Table Format 的所有问题,结合 Flink + 这个内置存储,提供 Materialized View 的自动流处理,直接提供查询服务,打造一个完整的 Streaming DB。

遇码开源社区 1455

大数据组件(四)快速入门实时数据湖存储系统Apache Paimon(3)

大数据组件(四)快速入门实时数据湖存储系统Apache Paimon(3)利用Tag兼容Hive,分支管理、仅追加表详解

qq_44665283的博客 1941

Flink + Paimon数据 CDC 入湖最佳实践

Apache Paimon 最典型的场景是解决了 CDC (Change Data Capture)数据的入湖,看完这篇文章可以了解到:1、为什么 CDC 入Hive迁移到 Paimon?2、CDC 入 Paimon 怎么样做到成本最低?3、Paimon 对比 Hudi有什么样的优势?Paimon 从 CDC 入湖场景出发,希望提供给你 简单、低成本、低延时 的一键入湖。

奔跑的蜗牛的博客 2890

对Paimon的理解

机制实现数据版本管理和并行处理,同时避免了因版本控制而引入过多的存储开销。这些机制并不复制数据,而是通过。是Paimon的重要特性,Paimon通过。离线数仓数据备份的成本就大大减少了。,并不会导致显著的存储开销增长。,有效地优化了存储使用。来管理数据版本,配合后台的。

hbuzhuhaoju的博客 1369

paimon中的Tag

在传统数仓场景中,从传统数据库中导入的事实表数据一般是全量导入,按天分区每天都存储一份全量数据,paimon对此提供了Tag机制,创建TAG时,会对当前数据做一份全量快照,在之后对表的数据进行更新也不会影响已经打完TAG的数据。其实就是对当前的数据做镜像,或者说做备份。

javaMylife的博客 733

flink同步kafka到paimon,doris加速查询

flink + paimon + doris

a123147abc的博客 1438

Paimon快照详解

Paimon 快照(Snapshot)机制详解:快照作为表在特定时间点的数据状态记录,具有不可变性、版本化和增量存储特性。核心作用包括数据版本控制、时间点恢复和增量处理。通过配置快照过期参数(保留时间、数量限制)和创建参数(合并大小、并发变更数)来管理存储空间和性能。快照策略采用滑动窗口机制自动清理过期数据,同时支持合并小快照优化存储。提供多种操作方式:SQL/API创建快照、查询快照信息、读取特定版本数据,以及手动合并快照优化性能。

m0_74880098的博客 1866

Paimon: Streaming data lake 数据湖项目的后起之秀

Paimon 是流数据湖平台,具有高速数据摄取、变更日志跟踪和高效的实时分析能力 数据湖是大数据近年来的网红项目,熟知的开源数据湖三剑客 `Apache hudi`、`Apache iceberg` 、`Databricks delta` 近年来野蛮生长,目前各自背后也都有商业公司支持,投入了大量的人力物力去做研发和宣传。 `Paimon`的前身是`flink-table-store`即`FTS`

penriver的博客 2332

Apache PAIMON 学习

Paimon在最新的版本当中也会推出Paimon object Table,希望通过Object Table管理非简化的数据,包括在OOS或者HDFS上的图片,视频,文件,音频之类的文件。拿到这些原数据之后就可以通过包括pySpark ,Flink SQL ,Spark SQL 等,通过这种结构化的处理,读表知道有哪些文件,这些文件的文件大小可以做一些过滤,也可以把这些文件读出来做一些处理,所以通过这样的方式把非结构化和结构化的SQL的处理,或者结构化的计算引擎的处理结合到一起,让整个结构化的处理更简单。

wangqiaowq的博客 2226

Paimon实战 -- paimon原理解析

Apache Paimon 原名 Flink Table Store,2022年1月在 Apache Flink 社区从零开始研发,Flink 社区希望能够将 Flink 的 Streaming 实时计算能力和 Lakehouse 新架构优势进一步结合,促进数据在数据湖上真正实时流动起来,并为用户提供实时离线一体化的开发体验。

阿华田的博客 5075

【Apache paimon】-- 7 -- tag 创建与管理

apache paimon 的快照提供了一种非常容易访问历史数据的方法,但 flink job 会生成太多快照。我们通过 tag 策略可以保留重要的快照,删除不重要的 snapshot。创建 tag 的快照,在进入过期清除流程时,快照的元数据与数据文件仍会被持续保存。当快照过期后,利用 tag 仍能追溯查询到特定时间点的数据。在实践中,我们通常每日生成一个 tag ,能够确保对每一天历史数据的持久访问能力,为数据分析、审计和追溯等应用场景提供了支撑。

欢迎来到我的博客,一起探索代码里的世界! 1109

Paimon Tag和Branch创建文件存储过程

如果data-file被引用则不会被压缩,压缩仅针对未被引用的文件,创建tag时候根据当前快照进行创建。

hbuzhuhaoju的博客 1088

paimon实战 -- 数据时间旅行原理解析

摘要:Apache Paimon通过Snapshot快照机制实现时间旅行功能,允许查询历史数据版本。其核心原理是采用LSM-Tree结构管理多版本元数据,而非物理备份数据。当数据变更时,Paimon生成新的Snapshot文件记录Manifest清单,并通过追加写方式存储增量数据文件。用户可通过Snapshot ID、时间戳或Tag三种方式回溯数据。系统通过Compaction合并和Snapshot清理机制平衡存储空间,未被引用的旧数据文件才会被物理删除。这一功能为数据容灾、算法回溯和数据审计提供了高效解决

阿华田的博客 106

干货 | 准实时数仓落地实战:携程商旅基于Paimon的湖仓一体架构设计与批流融合实践

在我们内部实践中,基于Tag的增量计算替代全量ETL后,作业的处理速度提升了4~5倍,尤其在增量数据较少的ETL场景下,带来了显著收益。这不仅显著提升了计算效率,还增强了数据的可维护性和灵活性。在确保数据准确性的基础上,为提升数据新鲜度,我们设计了如图所示的实时与离线混合链路:订单票号等核心字段的加工使用Flink+Paimon准实时链路完成,最终的订单筛选则通过Spark批作业定时执行,产出的结果表通过携程内部DaaS服务注册为API,便于下游系统实时获取提醒订单,兼顾了数据的时效性与服务的稳定性。

携程技术 1310

论文理解【LLM-OR】—— 【PaMOP】Guiding Large Language Models in Modeling Optimization Problem

针对 LLM 求解运筹优化任务,PaMOP 通过约束划分树分离子问题,实现复杂优化问题的分块建模,并结合求解器反馈与反向翻译一致性检查迭代纠错,降低子任务复杂度,提升可执行率与建模准确性。

佚失的诗篇 1008

别再为跨页读写发愁了!STM32F407模拟I2C驱动24C256/512的避坑指南

本文详细解析了STM32F407模拟I2C驱动24C256/512的跨页写入问题,揭示了24C系列存储器'写满一页不会自动翻页'的关键机制,并提供了经过验证的分页写入算法和优化方案。通过GPIO时序优化、地址计算和错误处理等技巧,帮助开发者解决数据错乱、覆盖等常见问题,实现稳定可靠的EEPROM读写操作。

weixin_42631411的博客 377

Apache Paimon 实时数据湖: Streaming Lakehouse 的存储底座

Apache Paimon作为实时数据湖存储底座,支持流计算3.0架构,通过CDC实时入湖实现高效数据更新。相比传统Hive数仓,Paimon采用主键表+Tag机制,提供实时查询、离线视图和增量查询能力,显著降低存储成本。其LSM文件复用特性可实现数十倍存储优化,同时支持Flink双流Join、Lookup Join和Partial Update等多种数据打宽方案。Paimon已形成包含83+贡献者的繁荣生态,兼容Flink、Spark等多种计算引擎,并持续扩展外键打宽等能力,为实时湖仓场景提供灵活高效的解

SmartSi 1551

服务器搭建原神私服教程

项目的稳定版分支提供了编译好的服务端程序,但是博主觉得还是用dev版本的比较好。dev版本需要自己编译的,不要听到编译这两个字就头大,相反,这个服务端的编译相当简单。把文件中的两个IP地址127.0.0.1修改为你服务器的地址,修改完成后按 esc 输入 :wq。Mongodb作为服务端的数据库使用,我们这里安装最新版的Mongodb5。注意:如果想要使用最新版的服务端,必须安装>=17版本的java。tmux可以保证你关掉控制台的时候,程序依然继续运行。至此,服务端所需要的运行环境全部配置完成。

用最简单的方式说最重要的事!服务器、存储、云计 算、A智能的大数据产品、游戏开发技术。致力于广 大开发者、政企用户、各项机构等,构建云上世界提供全方位云计算解决方案。旨在打造差异化的开放式闭环生态系统帮助用户快速构建稳定、安全的云计算环境。 1万+

大数据组件(四)快速入门实时数据湖存储系统Apache Paimon(2)

利用Paimon做维表join,集成Mysql CDC

qq_44665283的博客 1889

CUDA-GDB(11)——调试示例演练

本博客包含三个CUDA-GDB的演练示例: ​​​​▶ Example: bitreverse ▶ Example: autostep ▶ Example: MPI CUDA Application

AI-安全-功耗 1515

uniapp(全端兼容) - 最新详细uniapp全平台植入使用echarts图表插件,引入 Echarts 图表及使用详细教程,提供各种图表使用示例(拒绝复杂的过程,附带详细的使用示例保姆级教程)

uniapp 微信小程序 echats 图表,uni-app小程序引用echarts,niapp 微信小程序引入echats教程,uniapp 使用echats图表,uniapp开发如何在微信小程序平台使用echats图表,uniapp开发的小程序中怎么用echats,在uni-app中编译到微信小程序如何使用echarts,UNIAPP微信小程序使用Echarts,uni-app微信小程序使用echarts,Uniapp小程序端使用echarts最详细的教程,uni-app中使用Echarts绘画图表,u

✅ 精选推荐文章 1万+

Apache Paimon:开启实时湖仓存储新时代

Apache Paimon:开启实时湖仓存储新时代

ith321的博客 1930

控制科学与工程(自动化)保研经验【4】——浙大篇

控制科学与工程(自动化)保研经验【4】——浙大篇

Control Everything 1万+

【全网首发】Apache Paimon大厂面试必备系列-基础篇

这是一个系列文章,包含基础篇、原理篇、进阶篇、实践篇等至少4+个系列。欢迎收藏、追更。本系列的文章非常「功利」,完全着眼于面试,当然读者完全可以把它当成学习完Paimon后的自我检验也是可以的。文章较长,推荐收藏。本篇文章是基础篇。基础篇是入门Paimon必须要掌握的部分。本系列内容在知识星球同步更新,知识星球内同步答疑,冲刺中大公司、高阶岗位的同学随时在知识星球提问。本文部分参考了Paimon官...

微信搜:import_bigdata,大数据领域硬核原创作者 2735

【Matlab】多旋翼无人机视觉伺服跟踪控制程序

本文介绍了基于Matlab的多旋翼无人机视觉伺服跟踪控制程序开发方法。该系统采用视觉感知、坐标转换、伺服控制和仿真验证四个核心模块,通过HOG+SVM目标检测、Shi-Tomasi特征提取和PID双闭环控制算法实现动态目标跟踪。详细阐述了相机标定、目标检测、坐标转换及伺服控制等关键环节的Matlab实现代码,并进行了仿真验证。结果表明该系统在±0.1m的跟踪精度下可实现100Hz的实时处理,适用于室内外复杂场景。文章还提出了工程应用中的优化建议,为无人机视觉伺服系统的开发提供了完整的技术方案。

unber的博客 507

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: canal(1.1.8) 部署
下一篇: 三节点Kafka(3.9.0-支持jdk8的最高稳定版本)集群部署
wangyutian5u
博客等级 码龄4年 94粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值