Paimon写入性能

发布于:2025-02-10 ⋅ 阅读:(75) ⋅ 点赞:(0)

写入性能

Paimon的写入性能与检查点密切相关,因此需要更大的写入吞吐量:

  • 增加检查点间隔,或者仅使用批处理模式。
  • 增加写入缓冲区大小。
  • 启用写缓冲区溢出。
  • 如果您使用固定存储桶模式,请重新调整存储桶数量。

1 并行度

建议sink的并行度小于等于bucket的数量,最好相等。

选项 必需的 默认 类型 描述
sink.parallelism No (none) Integer 定义sink的并行度。默认情况下,并行度由框架使用上游链式运算符的相同并行度来确定。

2 Compaction

当Sorted Run数量较少时,Paimon writer将会在单独的线程中异步执行压缩,因此记录可以连续写入表中。然而,为了避免Sorted Runs的无限增长,当Sorted Run的数量达到阈值时,writer将不得不暂停写入。下表属性确定阈值。

选项 必需的 默认 类型 描述
num-sorted-run.stop-trigger No (none) Integer 触发停止写入的Sorted Runs次数,默认值为 ‘num-sorted-run.compaction-trigger’ + 1。
  • num-sorted-run.stop-trigger 变大时,写入停顿将变得不那么频繁,从而提高写入性能。
  • 如果该值变得太大,则查询表时将需要更多内存和CPU时间。如果您担心内存 OOM,请配置 sort-spill-threshold。它的值取决于你的内存大小。

3 优先考虑写入吞吐量

如果希望某种模式具有最大写入吞吐量,则可以缓慢而不是匆忙地进行Compaction。可以对表使用以下策略:

num-sorted-run.stop-trigger = 2147483647
sort-spill-threshold = 10

此配置将在写入高峰期生成更多文件,并在写入低谷期逐渐合并到最佳读取性能。

4 触发Compaction的Sorted Run数

Paimon使用LSM树,支持大量更新。LSM在多次Sorted Runs中组织文件。从LSM树查询记录时,必须组合所有Sorted Runs以生成所有记录的完整视图。

过多的Sorted Run会导致查询性能不佳。为了将Sorted Run的数量保持在合理的范围内,Paimon writers将自动执行Compaction。下表属性确定触发Compaction的最小Sorted Run数。

选项 必需的 默认 类型 描述
num-sorted-run.compaction-trigger No 5 Integer 触发Compaction的Sorted Run数。包括0级文件(一个文件一级排序运行)和高级运行(一个一级排序运行)。

5 写入初始化

在写入初始化时,bucket的writer需要读取所有历史文件。如果这里出现瓶颈(例如同时写入大量分区),可以使用 write-manifest-cache 缓存读取的manifest数据,以加速初始化。

6 内存

Paimon writer中主要占用内存的地方有3个:

  • Writer的内存缓冲区,由单个任务的所有Writer共享和抢占。该内存值可以通过 write-buffer-size 表属性进行调整。
  • 合并多个Sorted Run以进行Compaction时会消耗内存。可以通过 num-sorted-run.compaction-trigger 选项进行调整,以更改要合并的Sorted Run的数量。
  • 如果行非常大,在进行Compaction时一次读取太多行数据可能会消耗大量内存。减少 read.batch-size 选项可以减轻这种情况的影响。
  • 写入列式(ORC、Parquet等)文件所消耗的内存,不可调。

网站公告

今日签到

点亮在社区的每一天
去签到