数据岗位面试题更新 2026-08-05

请阐述 HBase 中 TTL 机制的具体实现原理,以及它是如何删除过期数据的?

数据技术原理Apache HBase

考察说明

考察对 HBase 内部存储结构、TTL 实现机制及数据清理流程的理解。

回答思路

  1. 【回答框架 1】HBase 的 TTL(Time To Live)是列族级别的属性,用于设置数据的存活时间。当数据写入时,其时间戳加上 TTL 值即为过期时间。在读取数据时,如果当前时间大于过期时间,则该数据被视为不可见。
  2. 【回答框架 2】TTL 的实现基于 HBase 的 KeyValue 结构,其中包含时间戳。过期判断发生在两层:一是读取路径,通过布隆过滤器和时间戳比较过滤过期数据;二是后台的 Compaction 过程,在 Major Compaction 时真正物理删除过期数据。
  3. 【回答框架 3】具体清理流程:在 Major Compaction 中,HBase 会扫描所有 HFile,根据每个 Cell 的时间戳和 TTL 判断是否过期,过期则标记删除,最终重写 HFile,释放存储空间。Minor Compaction 通常不会删除过期数据,因为其只合并部分文件。
  4. 【回答框架 4】TTL 的数据清除时机主要依赖于写入频率和 Compaction 触发策略。如果数据很少被写入,过期数据可能长时间未被清理,导致磁盘空间占用,因此需要结合监控和定期 Major Compaction 来保证清理效率。
  5. 【关键点 1】TTL 是列族属性,以数据写入时间戳 + TTL 判断过期。
  6. 【关键点 2】读取时通过时间戳过滤过期数据。
  7. 【关键点 3】物理删除发生在 Major Compaction 过程中。
  8. 【关键点 4】Minor Compaction 通常不清理过期数据。
  9. 【易错点 1】不要认为 TTL 设置后过期数据会立即删除,实际依赖于 compaction 触发。
  10. 【易错点 2】注意 TTL 与版本数(VERSIONS)的关系,过期的版本也可能被保留,需理解 HBase 的版本管理。
  11. 【易错点 3】避免混淆 TTL 与 HFile 的过期时间,HFile 本身也有 TTL 但不同。