Paimon 面向什么场景
Paimon 是流式湖仓表格式:主键表内部用 LSM 结构组织数据,支持高频更新与删除,并能把变更日志以流的方式输出给下游。它适合「CDC 实时入湖 + 下游继续流式消费」的链路,把原本需要多套存储拼起来的实时数仓收拢到一处。
基本信息
| 定位 | 流式湖仓表格式,面向实时写入 |
|---|---|
| 主键表 | LSM 结构,支持更新与删除 |
| 变更日志 | changelog-producer 决定产出方式 |
| 生态 | 与 Flink 深度集成,也支持 Spark 等引擎读取 |
| 分桶 | 主键表需指定 bucket 数量,影响并行度与热点 |
典型使用场景
- CDC 入湖:上游变更日志实时写入主键表,永远保留最新态
- 流式消费:下游直接读变更日志做实时汇总,不必回查明细
- 准实时维表:维表更新通过主键表落地,读侧拿到的是最新值
- 流批统一:同一张表既能批读全量,也能流读增量
- 替代部分消息队列场景:把短期的中间结果直接落在湖表里
主键表建表示例
主键表建表示例
CREATE TABLE paimon.db.dim_store (
store_id STRING,
store_name STRING,
region_id STRING,
PRIMARY KEY (store_id) NOT ENFORCED
) WITH (
'bucket' = '4', -- 分桶数:影响并行度与热点
'changelog-producer' = 'input', -- 变更日志产出方式
'snapshot.time-retained' = '1d' -- 快照保留时长
);
-- 建表后可用批模式读全量,也可用流模式读增量表类型对照
| 表类型 | 更新能力 | 适用判断 |
|---|---|---|
| 主键表 | 支持更新与删除 | 维表、状态表、CDC 落库 |
| 追加表 | 只追加不更新 | 日志、不可变明细 |
| 分区主键表 | 按分区管理生命周期 | 按天分区且需更新 |
| 分桶不当的主键表 | 可写但存在热点 | 需重新评估分桶数 |
变更日志为什么要专门配置
下游做流式汇总时,看到的不是文件内容变化,而是明确的变更日志。产出方式决定了下游拿到的精度与延迟:由输入直接产出最省资源,通过查找或全量合并产出则代价更高但语义更完整。选哪种要在下游精度要求和资源开销之间权衡,选错了表现为汇总结果对不上。
主键表的分桶数直接决定写入并行度。分桶数偏少时,单个桶承担全部写入压力形成热点;分桶数偏多则小文件与元数据负担上升,需要按实际数据量与写入速率评估。
主键表需要定期做快照过期与文件合并,否则快照与文件持续累积,读取规划变慢。保留时长要覆盖下游补数所需的时间范围。