第 14 章 · Log Compaction 与 Tombstone 可视化

同 Key 最新值 · null 删除标记 · clean/dirty/active 三区

可视化日志压缩:相同 Key 只保留最新 Value

下方分区里默认有 12 条消息,涉及 4 个 Key(k1~k4)。点「触发 Compaction」按钮,可视化看到旧记录被淡化、新记录保留,offset 不连续。

分区日志(active segment 不参与压缩)

未压缩或保留 被压缩淘汰 压缩后保留(每 Key 最新) active segment(不参与)
0
物理记录数
0
不同 Key 数
0
压缩后留下条数
0
压缩节省条数

压缩后的「最终态快照」(Key→Value 视图)

Key最新 Value保留的 offset

Tombstone 删除流程:写入 → dirty → compact → tombstone → 最终物理清理

展示 user_id=42 的完整生命周期:先 insert,再 update 几次,发 tombstone (null value) 删除,等 `delete.retention.ms` 过期后物理消失。

五步推进

就绪

分区日志状态

普通记录 Tombstone (null) 已物理清理
下游 read_committed Consumer 看到的「user_id=42 的状态」
未消费

「不可压缩区 / 可压缩区」分隔可视化

Cleaner 线程把分区日志分成三段:已压缩区(clean) / 可压缩区(dirty) / active segment,加上 min.compaction.lag.ms 限定的 不可压缩区(消息太新不能压)。

参数

分区横向布局

clean (已压缩区) dirty (可压缩区) uncompactable (lag 内) active segment (永不压)
点击重新生成
0
clean
0
dirty
0
uncompactable
0
active

触发判断