可视化日志压缩:相同 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