Fluss 提供日志保留、KV 保留和分区保留三种数据保留机制,可组合配置,控制数据在表中的保留时长。
保留机制概览
机制 | 过期对象 | 主要配置 |
日志保留(Log Retention) | 日志表的数据日志、主键表的 Changelog |
|
KV 保留(KV Retention) | 主键表 KV 存储中的单行数据 |
|
分区保留(Partition Retention) | 日志表或主键表中完整的时间分区 |
|
三种机制可叠加使用。例如,主键表可以在保留当前数据行的同时,仅保留一天的 Changelog。
过期清理为异步执行,TTL 不是数据删除或磁盘空间回收的精确期限。
日志保留
表日志 TTL
通过 table.log.ttl 控制日志的保留时长。默认值为 7 天,设置为 0ms 表示禁用基于该 TTL 的过期清理。
对于日志表,该配置控制表数据本身的保留。
对于主键表,该配置控制消费者可读的 Changelog 历史。当前 KV 数据行由 KV 保留机制控制,见下文。
本地日志 TTL
开启远程存储(默认开启)后,本地与远程存储分工不同:
本地存储是热层,保存最新数据,服务低延迟的尾部读取。默认使用 Apache Arrow 日志格式,支持列裁剪,流式消费仅读取所需列。
远程存储是冷层,在配置的日志保留期内保持较旧日志可读,即使本地副本已删除。它支持历史数据回放,以及超出本地窗口的消费追赶。远程日志读取通常有更充裕的网络带宽,不影响集群的在线读写流量。
本地保留时长的建议估算方式:尾部消费者的预期最大滞后,加上重启与反压后的追赶时间,再留出一定余量。远程保留时长则根据消费者需要回放多久之前的数据来设置。由此实现热工作集留在本地、远程存储承载更长历史。
相关配置项如下:
配置项 | 默认值 | 说明 |
|
| 控制远程日志的保留时长。 |
| 继承 | 控制本地副本基于 TTL 的清理。设置为 |
|
| 基于数量的清理策略所保留的最近本地日志段数量,必须大于 0。 |
两个 TTL 均为正值时,table.log.local-ttl 不得大于 table.log.ttl。本地副本上传至远程后,到达本地 TTL 或日志段数量上限任一条件即可能被删除。将本地 TTL 设置为 0ms 时,基于数量的清理策略仍然生效。

例如:消费者滞后通常不超过 30 分钟,重启与追赶预留 1 小时,则 table.log.local-ttl 可设为 '2 h' 作为起点;需要 7 天回放历史时,table.log.ttl 设为 '7 d'。同时应按峰值写入速率与各分桶日志段滚动频率,估算覆盖该 2 小时热窗口所需的 table.log.tiered.local-segments。默认值 2 并不保证本地保留 2 小时的数据:基于数量的策略可能早于本地 TTL 删除本地副本。读取超出本地窗口的数据时,将访问远程存储。
上述三个表级配置均支持 ALTER TABLE ... SET 与 ALTER TABLE ... RESET 修改。
活跃段滚动
低写入量的表中,活跃日志端即使已过期,若没有新数据写入也不会被关闭,无法上传与清理。开启服务端配置 log.retention.roll-active-segment.enabled 后,已过期的活跃日志可在无新数据写入时正常上传与清理。该配置默认关闭,支持集群动态更新,过期时间遵循上文描述的有效本地日志 TTL。
KV 保留
主键表支持行级 TTL,在创建表时配置:
配置项 | 默认值 | 说明 |
| 未设置时禁用 | 使单行 KV 数据过期。配置时必须不小于 1 毫秒。 |
| 未设置,使用处理时间 | 使用指定列的事件时间判断行过期,需与 |

示例:以下表按事件时间使数据行 7 天后过期,同时仅保留 1 天 Changelog。
CREATE TABLE pk_table
(
id BIGINT,
event_time BIGINT,
name STRING,
PRIMARY KEY (id) NOT ENFORCED
) WITH (
'bucket.num' = '4',
'table.kv.ttl' = '7 d',
'table.kv.ttl.time-column' = 'event_time',
'table.log.ttl' = '1 d'
);使用规则与限制:
创建行级 TTL 表前,须将集群所有节点升级至 Fluss 0.9-ali-7.1 及以上;存在该类表后,不支持降级至该版本以下。
两个配置项仅支持建表时设置,不支持后续修改或重置。
过期判断默认基于处理时间。设置
table.kv.ttl.time-column后改用事件时间:该列类型须为BIGINT(Unix 毫秒时间戳)、TIMESTAMP或TIMESTAMP_LTZ,其中TIMESTAMP按 TabletServer 系统时区解释,各服务器时区须一致;该列值为 NULL 的行不过期。过期不等于立即不可读。清理异步执行,到期仅表示可清理;清理完成前仍可能读到过期行,延迟无上限保证,不适用于要求到期立即不可读的场景。
清理不写 Changelog。$changelog、$binlog 虚拟表及 Changelog 消费者观察不到清理事件;清理后再次写入相同主键视为插入。
远程快照保留策略独立于行级 TTL,由
kv.snapshot.num-retained控制。
分区保留
数据需要按完整时间分区过期时,使用自动分区功能,日志表与主键表均适用。设置 table.auto-partition.enabled = 'true'(默认 false)开启,详细操作请参见《数据分区》。
配置项 | 默认值 | 说明 |
|
| 分区创建与过期的日历时间单位。 |
|
| 保留当前时间单位之前的历史分区数量,更早的分区过期删除。 |
|
| 预创建的分区数量(含当前分区),不会延长保留时长。 |
| 系统时区 | 日历边界的时区。 |

例如:时间单位为 DAY 且 num-retention = '3' 时,11 月 11 日当天保留 11 月 8 日至 10 日三个历史分区及当前分区 11 月 11 日;默认预创建数量还会创建 11 月 12 日。向更早的分区写入新数据不会延长该分区的保留时长。
日志 TTL 与 KV TTL 会在分区内部使数据过期;即使日志或 KV 的 TTL 长于分区保留时长,也不会阻止分区整体过期。
保留数量与预创建数量支持
ALTER TABLE ... SET与ALTER TABLE ... RESET修改。对于湖流一体表,Fluss 日志或分区过期后,已分层存储到数据湖中的数据仍可通过 Union Read 访问。