Apache Paimon主键表的一些最佳实践

今天我们说说Paimon主键表的一些使用上的注意事项。

一、主键表

主键表是Paimon的一种表类型。用户可以插入、更新或删除表中的记录。

说的直白点就是,允许你设置唯一主键,然后覆盖更新。

Bucket选择

无论分区表还是未分区表,Bucket都是最小的读写单元。每个Bucket包含一个LSM树及其变更日志文件。

用户可以通过提供bucket-key选项来指定分桶列。如果未指定bucket-key,那么就根据整条记录的hash值进行数据分布(最新版本中,创建Append Queue表时必须指定bucket-key),如果指定了主键,那么会根据主键进行hash。

Bucket数量会限制处理的最大并行度。但是这个值不是越大越好,一般每个Bucket中的数据量官方推荐的值是200MB-1GB,事实上2G左右也可以,但是总之Bucket中的数量不能过多。

同时Paimon是支持扩容Bucket的,并且提供了Rescale Bucket的功能对历史数据重新分布。

跨分区更新问题

Paimon主键表本身是允许设置分区的。例如你的某一张表设置了天分区,如果你的Primary Key不包含分区键,这时候就会出现跨分区更新的问题。根据你的合并引擎不同,表现不同:

  • Deduplicate:删除旧分区中的数据,并将新数据插入到新分区中;

  • PartialUpdate & Aggregation:将新数据插入旧分区;

  • FirstRow:如果有旧值,则忽略新数据

数据量较大时,性能下降明显。

所以,强烈建议,如果你要用主键表,那么最好是不带分区,并且配合行级别过期能力进行数据失效。

核心配置就两个:

'record-level.expire-time': 要保留的时间,秒值

'record-level.time-field': 过期字段,INT类型

文件合并

压缩是一个资源密集型过程,会消耗一定的CPU时间和磁盘IO,因此过于频繁的压缩可能会导致写入速度变慢。

Paimon框架本身提供了通用的压缩策略。大多数场景,你不需要做任何事情。但是如果你的任务因为compaction导致lag,那么有两种方案可以考虑:

  1. 同步变异步

直接把这两个参数打开,数据写入不会受到文件合并的影响。

go 复制代码
num-sorted-run.stop-trigger = 2147483647
sort-spill-threshold = 10
  1. 启动专属压缩任务

Paimon给我们提供了Dedicated Compaction压缩策略,这个策略类似Hudi中的Off-line Compaction。

什么意思呢?你可以单独启动一个任务专门进行文件的合并。

例如:

go 复制代码
<FLINK_HOME>/bin/flink run \
    /path/to/paimon-flink-action-0.8.2.jar \
    compact \
    --warehouse s3:///path/to/warehouse \
    --database test_db \
    --table test_table \
    --partition dt=20221126,hh=08 \
    --partition dt=20221127,hh=09 \
    --table_conf sink.parallelism=10 \
    --catalog_conf s3.endpoint=https://****.com \
    --catalog_conf s3.access-key=***** \
    --catalog_conf s3.secret-key=*****

300万字!全网最全大数据学习面试社区等你来!

如果这个文章对你有帮助,不要忘记 「在看」 「点赞」 「收藏」 三连啊喂!

全网首发|大数据专家级技能模型与学习指南(胜天半子篇)

互联网最坏的时代可能真的来了

我在B站读大学,大数据专业

我们在学习Flink的时候,到底在学习什么?

193篇文章暴揍Flink,这个合集你需要关注一下

Flink生产环境TOP难题与优化,阿里巴巴藏经阁YYDS

Flink CDC我吃定了耶稣也留不住他!| Flink CDC线上问题小盘点

我们在学习Spark的时候,到底在学习什么?

在所有Spark模块中,我愿称SparkSQL为最强!

硬刚Hive | 4万字基础调优面试小总结

数据治理方法论和实践小百科全书

标签体系下的用户画像建设小指南

4万字长文 | ClickHouse基础&实践&调优全视角解析

【面试&个人成长】社招和校招的经验之谈

大数据方向另一个十年开启 |《硬刚系列》第一版完结

我写过的关于成长/面试/职场进阶的文章

当我们在学习Hive的时候在学习什么?「硬刚Hive续集」

相关推荐
coding已疯狂2 分钟前
面试官:说一下SpringBoot 启动流程
java·spring boot·spring
毕业设计制作和分享6 分钟前
ssm公交车信息管理系统+vue
java·vue.js·spring boot·毕业设计·mybatis
ffyyhh9955117 分钟前
SpringBoot事务管理:自调用与事务回滚行为分析
数据库
鸠摩智首席音效师8 分钟前
如何在一个 Docker 容器中运行多个进程 ?
java·docker·容器
PangPiLoLo10 分钟前
高可用架构-业务高可用
java·性能优化·架构
华纳云IDC服务商11 分钟前
CentOS系统中查看内网端口映射的多种方法
linux·运维·centos
小光学长12 分钟前
基于vue框架的的楼盘销售管理系统6n60a(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
数据库
爱上语文13 分钟前
苍穹外卖 商家取消、派送、完成订单
java·开发语言·spring boot·后端
Francek Chen19 分钟前
【大数据技术基础 | 实验八】HBase实验:新建HBase表
大数据·数据库·hadoop·分布式·zookeeper·hbase