Paimon配置与类型
WITH参数说明
本章节介绍Flink连接器读写Paimon表的参数配置。通过配置相关参数,可以控制Flink与Paimon表格式之间的连接和读写行为,满足不同业务场景下的数据读写需求。
- Source参数
表1 Source参数 参数
是否必填
类型
默认值
取值范围
说明
scan.mode
否
String
default
default / latest-full / latest / compacted-full / from-snapshot / from-snapshot-full / from-timestamp / from-creation-timestamp / incremental
指定读取模式。参数取值如下:
- default自动判断。
- latest-full先产出最新快照再持续读取变更。
- latest仅持续读取最新变更(不读历史)。
- compacted-full产出最近压缩后的快照。
- from-snapshot从指定快照开始(不产出初始快照)。
- from-snapshot-full从指定快照开始(含初始快照)。
- from-timestamp从指定时间戳开始。
- from-creation-timestamp从指定创建时间戳开始。
- incremental增量读取两个快照间变更。
Flink运行时根据此模式决定Source的数据扫描策略和起始位置,影响首次读取的数据范围。
scan.snapshot-id
否
Long
无
正整数
指定起始快照ID。仅在scan.mode为from-snapshot时生效。Flink运行时从该快照对应的表状态开始读取数据,快照ID不存在时作业将启动失败。
scan.timestamp-millis
否
Long
无
毫秒时间戳
指定起始时间戳。仅在scan.mode为from-timestamp时生效。Flink运行时从该时间戳对应的快照开始读取数据,自动选择不晚于该时间戳的最新快照作为起始点。
scan.bounded.watermark-interval
否
Duration
无
正整数
设置有界读取的水印间隔。用于有界流模式的Watermark推进控制。Flink运行时按此间隔推进Watermark,当Watermark超过数据范围时Source自动结束。
lookup.cache.max-rows
否
Integer
无
正整数
设置维表查询缓存的最大行数。仅对Lookup JOIN场景生效。Flink运行时在内存中维护LRU缓存,缓存行数达到此上限后淘汰最久未访问的记录,增大此值可提高查询命中率但增加内存消耗。
lookup.cache.ttl
否
Duration
无
正整数+时间单位
设置维表查询缓存的TTL(存活时间)。仅对Lookup JOIN场景生效。Flink运行时在缓存记录超过TTL后将其失效,下次访问时重新从Paimon存储加载,用于平衡数据时效性与查询性能。
- Sink参数
表2 Sink参数 参数
是否必填
类型
默认值
取值范围
说明
write-mode
否
String
auto
auto / append-only / change-log
指定写入模式。参数取值如下:
- auto根据是否有主键自动选择。
- append-only追加写入(无需主键)。
- change-log变更日志写入(需主键表)。
Flink运行时根据此模式决定写入器的类型和数据的处理方式,auto模式下有主键自动使用change-log,无主键使用append-only。
merge-engine
否
String
deduplicate
deduplicate / partial-update / aggregation / first-row
指定合并引擎类型,仅主键表生效。
- deduplicate仅保留最新记录。
- partial-update部分字段更新(NULL不覆盖非NULL)。
- aggregation按聚合函数更新。
- first-row去重保留首行(不支持DELETE和UPDATE_BEFORE记录)。
Flink运行时在合并同主键记录时根据此引擎决定合并策略,影响数据的最终写入结果。partial-update和aggregation流式查询时需配合lookup或full-compaction的changelog-producer。
write-buffer-size
否
MemorySize
256mb
正整数
设置写入缓冲区大小。
Flink运行时在内存中缓冲写入数据,缓冲区满后刷写到磁盘,增大此值可减少刷写频率提高写入吞吐但增加内存占用。
write.max-writers-per-task
否
Integer
1
正整数
设置每个任务的最大写入器数量。
Flink运行时在每个Sink子任务中创建此数量的写入器并行写入数据,增大此值可提高单任务写入并行度但增加内存和文件句柄消耗。
changelog-producer
否
String
none
none / input / lookup / full-compaction
指定变更日志生产者模式。
启用后可产生完整的变更日志供下游流式消费。none不产生;input直接传递输入记录;lookup通过查找产生;full-compaction在全量压缩时产生。Flink运行时在提交数据时根据此模式生成对应的变更日志,供下游Source增量消费。
sink.parallelism
否
Integer
无
正整数
指定Sink算子的并行度。
未设置时使用作业全局并行度。Flink运行时根据此值创建对应数量的Sink子任务,每个子任务负责写入一部分分桶的数据,建议与bucket数保持一致以避免数据倾斜。
compaction.optimization-enabled
否
Boolean
false
true / false
控制是否启用压缩优化。
启用后Flink运行时在写入过程中自动触发小文件合并,减少文件数量提高查询性能,但会增加写入时的计算开销。
snapshot.time-retained
否
Duration
1h
正整数
设置快照保留时长。
Flink运行时在快照超过此时长后自动清理,释放存储空间。增大此值可保留更多历史数据用于增量读取和时间旅行查询,但会增加存储消耗。
snapshot.num-retained.min
否
Integer
10
正整数
设置最少保留的快照数量。即使快照超过保留时长,也至少保留此数量的快照。Flink运行时在清理快照时以此值为下限,确保增量读取有足够的快照可用。
snapshot.num-retained.max
否
Integer
无
正整数
设置最多保留的快照数量。设置后Flink运行时在快照数量超过此上限时清理最旧的快照,防止快照无限增长占用存储空间。
- 序列字段参数
表3 序列字段参数 参数
是否必填
类型
默认值
取值范围
说明
sequence.field
否
String
无
有效的列名
指定主键表的排序字段。
Flink运行时根据此字段的值判断记录的新旧顺序,值越大表示记录越新。未指定时按数据到达顺序决定。适用于多流更新场景中解决记录乱序问题。
rowkind.field
否
String
无
有效的列名
指定行类型字段,字段值为 '+I'(插入)、'-U'(更新前)、'+U'(更新后)、'-D'(删除)。Flink运行时根据此字段值确定记录的变更类型,无需依赖Flink运行时的回撤机制,适用于从Kafka等外部系统直接读取变更记录的场景。
- Lookup参数
表4 Lookup参数 参数
是否必填
类型
默认值
取值范围
说明
lookup.async
否
Boolean
false
true / false
是否启用异步Lookup。
启用后Flink运行时使用异步线程池并发查询Paimon存储,可显著提高Lookup JOIN的吞吐量,但会增加内存消耗。
lookup.async-thread-number
否
Integer
16
正整数
异步Lookup的线程池大小。
仅在lookup.async为true时生效。Flink运行时使用此数量的线程并发执行Lookup查询,增大此值可提高并发查询能力但增加内存和CPU消耗。
lookup.cache
否
String
AUTO
AUTO / FULL / MEMORY
Lookup缓存模式。
- AUTO自动选择;
- FULL全量缓存(小表推荐);
- MEMORY仅内存缓存。
Flink运行时根据此模式决定缓存策略,FULL模式在首次加载时读取全表数据到缓存,后续查询直接命中缓存。
- 分桶参数
表5 分桶参数 参数
是否必填
类型
默认值
取值范围
说明
bucket
否
Integer
-1
-2 / -1 / 正整数
设置分桶数量。
- -1为Dynamic Bucket(默认,自动管理分桶);
- -2为Postpone Bucket(延迟分桶,仅Append表);
- 正整数为固定分桶数。
主键表使用固定分桶时建议设置为与Sink并行度相同的值以避免数据倾斜。Flink运行时根据分桶键的哈希值将数据分配到对应桶中,分桶数影响数据分布的均衡性和并行读取能力。
bucket-key
否
String
主键列
有效的列名
指定分桶键。未指定时使用主键列作为分桶键。仅主键表生效。Flink运行时根据此列的哈希值进行分桶路由,选择与业务数据分布均匀的列作为分桶键可提高写入和查询性能。
数据类型
| Flink Data Type | Paimon Data Type |
|---|---|
| BOOLEAN | BOOLEAN |
| TINYINT | TINYINT |
| SMALLINT | SMALLINT |
| INT | INT |
| BIGINT | BIGINT |
| FLOAT | FLOAT |
| DOUBLE | DOUBLE |
| DECIMAL | DECIMAL |
| STRING | STRING |
| CHAR | CHAR |
| DATE | DATE |
| TIME | TIME |
| TIMESTAMP | TIMESTAMP |
| TIMESTAMP WITH LOCAL TIMEZONE | TIMESTAMP WITH LOCAL TIMEZONE |
| BINARY | BINARY |
| BYTES | BYTES |