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

Apache Kudu 在存储架构上是怎样组织的?它依赖哪些机制来同时保证数据写入与读取的高性能?

数据系统设计技术原理Apache Kudu

考察说明

考查对 Kudu 列式存储架构及其读写优化机制的理解。

回答思路

  1. 【回答框架 1】Kudu 采用列式存储与行式主键索引结合的架构,数据按表分区,每个分区由多个 Tablet 组成,Tablet 内数据分为 MemRowSet 和 DiskRowSet 两类存储。MemRowSet 为内存中的可变行存储,用于承接新写入;DiskRowSet 为落盘的不可变列式存储,按主键有序。
  2. 【回答框架 2】写入路径上,新数据先写入 MemRowSet,达到阈值后 Flush 为 DiskRowSet,并在后台执行 Compaction 合并小文件并清理重复数据。为支持高效主键更新与删除,Kudu 采用类似 LSM 的思路,在 DiskRowSet 中维护 Redo Undo 记录,插入时通过主键索引定位,更新删除则追加记录,避免原地修改。
  3. 【回答框架 3】读取路径上,Kudu 利用列式存储按需读取列,减少 IO;同时通过主键索引和分区裁剪快速定位所需数据。Scan 时结合 MemRowSet 与多个 DiskRowSet 的合并视图,利用 Undo 记录实现快照隔离,保证一致性读取。Compaction 不仅优化存储,也提升读取性能。
  4. 【回答框架 4】为兼顾随机读与批量扫描,Kudu 在 DiskRowSet 中维护 Bloom Filter 和主键索引,快速排除不存在的键;同时列式编码如字典、压缩等技术减少存储与 IO。相比于纯列存系统,Kudu 通过行式主键索引支持高效的点查和更新,相比纯行存系统则提供更好的分析查询性能。
  5. 【回答框架 5】Kudu 的架构设计以支持混合工作负载为目标,通过内存与磁盘分层、列式编码、主键索引及后台 Compaction,实现了写入与读取性能的平衡。实际调优需关注 Tablet 数量、分区方式、内存大小及 Compaction 策略等参数。
  6. 【关键点 1】Kudu 采用列式存储与主键索引结合的架构,数据分 Tablet 管理。
  7. 【关键点 2】新写入先进 MemRowSet,达到阈值后 Flush 为 DiskRowSet,Compaction 合并优化。
  8. 【关键点 3】更新删除通过 Redo Undo 记录实现,不原地修改,支持快照隔离读取。
  9. 【关键点 4】读取时列式按需读取,结合分区裁剪、Bloom Filter 和主键索引提升效率。
  10. 【关键点 5】架构目标是同时支持高效随机读写与批量分析扫描。
  11. 【易错点 1】不要将 Kudu 说成纯列存数据库,它结合了行式主键索引。
  12. 【易错点 2】不要忽略 Compaction 对读写性能的影响,过多小文件会拖慢读取。
  13. 【易错点 3】Kudu 并非所有场景都优于 HBase 或 Parquet,混合负载才最能体现优势。