paimon避坑指南

基于paimon-0.8的实践

1.下游实时消费异常

shell 复制代码
2025-08-05 11:24:49.176 ERROR org.apache.paimon.flink.source.ContinuousFileSplitEnumerator  - Failed to enumerate files
org.apache.paimon.table.source.OutOfRangeException: The snapshot with id 1690 has expired. You can: 1. increase the snapshot or changelog expiration time. 2. use consumer-id to ensure that unconsumed snapshots will not be expired.

🔍 异常核心原因

快照过期:Paimon 表的快照(Snapshot)ID 1691 已被清理,导致 Flink 作业无法读取该快照。

常见原因:

a.快照保留时间(snapshot.expire-time)或变更日志(Changelog)保留时间不足。

b.Flink 作业消费速度慢,未能在快照过期前完成读取。

c.未启用消费者组(Consumer ID):若未指定 consumer-id,Paimon 可能无法跟踪未消费的快照,导致快照被提前清理。

设置合适的snapshot保留策略

shell 复制代码
ALTER TABLE a SET ('snapshot.time-retained' = '24h');
ALTER TABLE a SET ('snapshot.expire-time' = '86400000');
--需重启任务才会生效
ALTER TABLE a SET ('snapshot.num-retained.max' = '600','snapshot.num-retained.min' = '300');

2.只要表使用了 merge-engine = partial-update 就必须保持 write-only = false,原因如下:

a. Partial-update 需要在写入端持续做 merge/回填 (Lookup Join),

这依赖写入任务内部的 compaction 线程 来把部分列更新合并成完整行。

一旦 write-only = true,compaction 线程被关闭,merge 动作无法完成 ,会导致: • 读到大量"半成品"行;

• 查询结果不完整或错误;

• 表状态最终不一致。

b. 官方文档与源码校验

• 在 PartialUpdateMergeFunction 初始化时会检查 write-only 标志;

• 如果检测到 write-only = true,会抛出IllegalArgumentException:

3.当使用'merge-engine' = 'partial-update',不要设置'sequence.field',否则迟到的数据会被丢弃,如果想要获取完整的chagelog使用'changelog-producer' = 'lookup',或者'changelog-producer' = 'full-compaction'

4.insert overwrite table 异常

bash 复制代码
org.apache.kyuubi.KyuubiSQLException: org.apache.kyuubi.KyuubiSQLException: Error operating ExecuteStatement: org.apache.spark.sql.AnalysisException: Table a does not support dynamic overwrite in batch mode.; OverwritePartitionsDynamic RelationV2

显式启用 Paimon 扩展并开启动态覆盖模式

--conf spark.sql.extensions=org.apache.paimon.spark.extensions.PaimonSparkSessionExtensions

5.使用spark sql写入异常信息

bash 复制代码
org.apache.kyuubi.KyuubiSQLException: org.apache.kyuubi.KyuubiSQLException: Error operating ExecuteStatement: org.apache.spark.sql.AnalysisException: LEGACY store assignment policy is disallowed in Spark data source V2. Please set the configuration spark.sql.storeAssignmentPolicy to other values

Spark 3.x 的 DataSource V2 不再支持 LEGACY 类型的字段类型自动转换策略,你必须把配置 spark.sql.storeAssignmentPolicy 改成 ANSI 或 STRICT

SET spark.sql.storeAssignmentPolicy=STRICT;

6.因compact导致ck总是超时

'changelog-producer.lookup-wait' = 'false'--使用异步look up

相关推荐
StarRocks_labs3 天前
StarRocks 接入 Paimon C++:让湖上查询进入原生执行链路
starrocks·c++·sql·jni·paimon·auto·湖上查询
SelectDB技术团队4 天前
存算分离建表与 Storage Vault 配置全流程:日志集群从建库到弹性扩缩容的命令链
elasticsearch·日志·数据湖·apache doris·日志数据·数据库选型·多模湖仓
俊哥大数据9 天前
基于 FlinkSQL + Paimon + Doris 的车联网流批一体湖仓实践 —— 第 1 章 业务背景与传统 Lambda 架构痛点
大数据·doris·湖仓一体·flinksql·paimon
俊哥大数据9 天前
基于 FlinkSQL + Paimon + Doris 的车联网流批一体湖仓实践 —— 第 2 章 流批一体湖仓总体架构与三条分区契约铁律
flink·doris·湖仓一体·paimon
俊哥大数据9 天前
基于 FlinkSQL + Paimon + Doris 的车联网流批一体湖仓实践 —— 第 4 章 Kafka 企标报文入湖(ODS 表设计)
flink·doris·湖仓一体·paimon·流批一体
俊哥大数据9 天前
基于 FlinkSQL + Paimon + Doris 的车联网流批一体湖仓实践 —— 第 3 章 Paimon 1.4 湖仓底座与 Catalog 配置
flink·doris·湖仓一体·paimon
躺柒11 天前
读数据架构知识体系指南16数据网格(上)
数据仓库·架构·数据分析·数据湖·数据架构·关系数据库
躺柒13 天前
读数据架构知识体系指南14数据编织
大数据·数据仓库·数据分析·数据湖·数据编织
躺柒14 天前
读数据架构知识体系指南13现代数据仓库
大数据·数据分析·数据湖·mdm·rdm
俊哥大数据19 天前
Flink1.20.3 实时消费 Kafka 数据并解析入湖 Paimon1.4.2 全流程实战
分布式·flink·kafka·数据湖·paimon