主键表优化
写入作业优化
Paimon写入作业的瓶颈通常由小文件合并引起。默认情况下,Flink每次做检查点时,如果分桶中小文件数量过多或使用了lookup变更数据产生机制,则需要等待当前的Paimon小文件合并过程结束。如果等待时间过长,或部分并发的检查点出现了长尾,会造成反压,影响作业效率。
您可以从以下角度进行优化:
调整Paimon Sink并发
通过SQL Hints设置sink.parallelism参数,以调整Paimon Sink的并发数。需要注意调整并发数可能会引起资源使用方面的变化。
调整Flink检查点间隔
检查点间隔将影响Paimon的时效性。增大检查点间隔时,需要注意业务能否接受更长的延迟。
增大Flink检查点间隔,即增加execution.checkpointing.interval作业参数的值
设置作业参数execution.checkpointing.max-concurrent-checkpoints: 3,其将允许至多3个检查点同时进行,主要用于减小部分并发检查点长尾的影响。
将小文件合并改为完全异步
将小文件合并完全异步化之后,Flink做检查点时无需等待小文件合并完成。
通过ALTER TBALE语句或SQL Hints设置以下表参数:
'num-sorted-run.stop-trigger' = '2147483647',
'sort-spill-threshold' = '10',
'changelog-producer.lookup-wait' = 'false'
各个参数的含义:
更改文件格式
如果不需要对Paimon表进行即席(OLAP)查询,只需进行批式或流式消费,可以选择配置以下表参数,将数据文件格式改为avro,并关闭采集统计数据,以进一步提高写入作业的效率。
'file.format' = 'avro',
'metadata.stats-mode' = 'none'
消费作业优化
调整Paimon Source并发
通过SQL Hints设置scan.parallelism参数调整Paimon Source的并发数。
从Read Optimized系统表消费数据
在批作业消费、流作业消费的全量阶段,以及即席(OLAP)查询中,Paimon源表的瓶颈主要由小文件引起。Paimon源表需要将小文件中的数据在内存中归并才能产出结果,因此小文件数量过多会增加归并过程的代价。然而写入作业过于频繁的小文件合并也会降低写入作业的效率,因此您需要在写入效率与消费效率之间做出平衡。
您可以在对应的写入作业中调整将小文件合并改为完全异步中提及的参数。如果您不需要消费最新的数据,也可以选择消费Read-optimized系统表以提高消费效率。
Append Scalable表常用优化
写入作业优化
通常情况下,Paimon Append Scalable表写入作业的瓶颈由并发限制以及文件系统或对象存储的带宽限制所决定。当遇见写入作业瓶颈时,应首先查看对应文件系统写入带宽是否到达了瓶颈,若带宽资源充裕,可尝试从以下几个方面对Append Scalable表进行优化。
调整Paimon Sink并发
通过SQL Hints设置sink.parallelism参数,以调整Paimon Sink的并发数。需要注意调整并发数可能会引起资源使用方面的变化。
检查数据是否倾斜
Paimon Append Scalable表在写入节点与上游节点之间没有数据重分布(Shuffle)。因此,若数据有较大倾斜,可能会导致部分节点资源利用率不高,整体写入效率低下。此时,可以将sink.parallelism参数设为与上游节点并发不同的值。完成设置后,在实时计算开发控制台看到上游节点与写入节点之间出现数据重分布(不在同一个Subtask中)即可。
消费作业优化
调整Paimon Source并发
通过SQL Hints设置scan.parallelism参数调整Paimon Source的并发数。
使用zorder、hilbert或者order对数据排序
数据的顺序对批作业处理或即席(OLAP)查询的效率有较大影响。您可以对Append Scalable表中的数据进行排序,以提高查询效率。
例如,当需要对分区中的数据按col1,col2...字段排序时:
<FLINK_HOME>/bin/flink run \
-D execution.runtime-mode=batch \
/path/to/paimon-flink-action-0.8.2.jar \
compact \
--warehouse <warehouse-path> \
--database <database-name> \
--table <table-name> \
--order_strategy <orderType> \
--order_by <col1,col2,...>
[--partition <partition-name>] \
[--catalog_conf <paimon-catalog-conf> [--catalog_conf <paimon-catalog-conf> ...]] \
[--table_conf <paimon-table-dynamic-conf> [--table_conf <paimon-table-dynamic-conf>] ...]
如果这个文章对你有帮助,不要忘记 「在看」 「点赞」 「收藏」 三连啊喂!