Skip to content

Commit 56c2808

Browse files
committed
feat: paimon
1 parent a9b803b commit 56c2808

File tree

5 files changed

+114
-0
lines changed

5 files changed

+114
-0
lines changed

docs/.vitepress/config.mts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export default defineConfig({
3131
{ text: 'Flink', link: '/notes/flink/flink-category' },
3232
{ text: 'Kafka', link: '/notes/kafka/kafka-category' },
3333
{ text: 'Iceberg', link: '/notes/iceberg/iceberg-category' },
34+
{ text: 'Paimon', link: '/notes/paimon/paimon-category' },
3435
]
3536
},
3637
// { text: 'Examples', link: '/markdown-examples' }
@@ -96,6 +97,16 @@ export default defineConfig({
9697
]
9798
}
9899
],
100+
'/notes/paimon/': [
101+
{
102+
text: 'Paimon学习笔记',
103+
link: '/notes/paimon/paimon-category',
104+
collapsed: true,
105+
items: [
106+
{ text: 'Paimon介绍', link: '/notes/paimon/01-intro' },
107+
]
108+
}
109+
],
99110

100111
},
101112

docs/notes/paimon/01-intro.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
---
2+
title: Paimon
3+
tags: Paimon
4+
outline: deep
5+
---
6+
7+
# Paimon简介
8+
9+
Flink 社区希望能够将 Flink 的 Streaming 实时计算能力和 Lakehouse 新架构优势进一步结合,推出新一代的 Streaming Lakehouse 技术,促进数据在数据湖上真正实时流动起来,并为用户提供实时离线一体化的开发体验。Flink 社区内部孵化了 Flink Table Store (简称 FTS )子项目,一个真正面向 Streaming 以及 Realtime的数据湖存储项目。2023年3月12日,FTS进入 Apache 软件基金会 (ASF) 的孵化器,改名为 Apache Paimon (incubating)。
10+
Apache Paimon是一个流数据湖平台,具有高速数据摄取、变更日志跟踪和高效的实时分析的能力。
11+
12+
## Paimon特性
13+
14+
![](./img/01/paimon.png)
15+
16+
paimon、hudi、iceberg都是在hdfs、对象存储(S3、OSS、OBS)上的表格式(以表形式布局数据),基于flink等引擎可以对表格式进行管理。
17+
18+
- 读/写:可以读取kafka、pulsar、mysql(binlog)等数据增量存储到HDFS、对象。
19+
- 生态: 除了Apache Flink之外,Paimon还支持Apache Hive、Apache Spark、Trino、Apache Doris、starrocks等其他计算引擎的读取。
20+
- 统一存储: 内部Paimon 将列式文件存储在文件系统/对象存储上,并使用 LSM 树结构来支持大量数据更新和高性能查询。
21+
22+
Paimon 提供表抽象。它的使用方式与传统数据库没有什么区别:
23+
- 在批处理执行模式下,它就像一个Hive表,支持Batch SQL的各种操作。查询它以查看最新的快照。
24+
- 在流执行模式下,它的作用就像一个消息队列。查询它的行为就像从历史数据永不过期的消息队列中查询流更改日志。
25+
26+
Paimon核心特性:
27+
28+
1. 统一批处理和流处理:离线、实时共用一份数据,支持生成变更日志、支持流式更新、支持流读、批读。
29+
2. 各种合并引擎:根据需求更新记录部分更新、聚合等。
30+
3. 丰富的表类型:主键表、Append 表。
31+
4. 模式演化:支持完整表结构的变化
32+
33+
34+
## SQL操作
35+
36+
```
37+
SET 'execution.runtime-mode' = 'streaming';
38+
SET 'table.exec.sink.upsert-materialize'='NONE';
39+
SET 'execution.checkpointing.interval'='10 s';
40+
41+
CREATE CATALOG paimon WITH (
42+
'type' = 'paimon',
43+
'warehouse' = 'hdfs://mj01:8020/lakehouse'
44+
);
45+
USE CATALOG paimon;
46+
create database if not exists merge_test;
47+
CREATE TABLE if not exists paimon.merge_test.deduplicate_test1(
48+
`id` Int,
49+
`name` String,
50+
`salary` Int,
51+
PRIMARY KEY (id) NOT ENFORCED
52+
) ;
53+
54+
insert into paimon.merge_test.deduplicate_test1 values(1,'flink',1000);
55+
insert into paimon.merge_test.deduplicate_test1 values(1,'flink',2000);
56+
insert into paimon.merge_test.deduplicate_test1 values(1,'flink',500);
57+
58+
```

docs/notes/paimon/02-lsm.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
---
2+
title: Paimon
3+
tags: Paimon
4+
outline: deep
5+
---
6+
7+
# LSM-Tree 结构化日志合并树
8+
9+
## LSM Tree
10+
11+
### 从关系型数据库说起
12+
13+
传统关系型数据库通常在读性能上有较高的要求,通过在特定范围内进行复杂、简单读场景下进行高效的查找。
14+
15+
1. 关系型数据库在读性能上有很高的要求(比如电商、金融通常人们说吞吐量、或者说查询太慢)。
16+
2. 关系型数据库在一定程度的数据规模下能够支持事务、快速的在线联机处理,在特定的复杂查询场景下能够高效的检索。
17+
3. 二分查找、hash、索引、B+树信息强加在了数据上,数据必须按照特定的方式存储。这样就有一个缺陷就是涉及到了磁盘的随机写。逻辑上很近的数据物理上可能很远,就可能造成大量的磁盘随机写,严重影响写操作性能。
18+
19+
总结:
20+
关系型数据库相比较看重的是读性能。通过二分查找、hash、B+树等是数据查询更快,但是底层磁盘的存储造成了大量的随机写。虽说电商、金融等行业业务数据量大、但是针对我们后端接口等操作的适合只是其中部分具有固定场景的查询(索引、where)。
21+
22+
### LSM Tree 特性
23+
24+
因为磁盘随机操作慢,顺序读写快的特性,如果要提高写操作性能,避免随机写,设计成顺序写。
25+
26+
顺序写简单,直接将数据追加的方式写入文件,因为完全是顺序的,所以性能很好。
27+
28+
但是读取却要花费很多时间。因为查询具体的内容需要扫描所有数据。通过上述分析得出如果要高效的读和写其实要根据具体的场景做一个权衡。所以LSM-Tree诞生了。
29+
30+
LSM-Tree全称是Log Structured Merge Tree,是一种分层,有序,面向磁盘的数据结构,其核心思想是充分了利用磁盘批量的顺序写要远比随机写性能高出很多。
31+
32+
发挥磁盘的特性:一次性地读取或写入固定大小的一批数据,并尽可能地减少随机寻道操作。
33+
34+
LSM-Tree 结构除了**利用磁盘顺序写实现高性能写**,也通过**划分内存+磁盘的多层合并结构**及各种优化实现尽量保证读性能。
35+
36+
传统关系型数据库查询的一般将数据库当作一个整体去查找我们想要的数据, 但**LSM 树通过这些有序文件实现了(管理一组索引、快照文件而不是单一的索引文件,并且推迟和批量地进行数据更新),充分利用内存来存储近期或常用数据以提高读效率,索引、快照文件也是按照时间顺序来存储数据(这也是为什么paimon、hudi通过spark、flink做实时依然很快),利用硬盘存储不常用数据以减少存储代价。**
37+
174 KB
Loading
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
title: Paimon学习笔记
3+
tags: paimon
4+
---
5+
6+
# Paimon学习笔记
7+
8+
* [paimon介绍](./01-intro.md)

0 commit comments

Comments
 (0)