面试题答案
一键面试数据写入时保障数据一致性的机制
- WAL(Write-Ahead Log):
- 在将数据写入MemStore之前,HBase会先将写入操作记录到WAL中。这是一种预写式日志机制,即使系统发生故障,在重启时也可以通过重放WAL日志来恢复未持久化的数据,确保数据不会丢失,从而保证了数据一致性。
- MemStore:
- 数据写入到MemStore后,MemStore会按Key - Value对的顺序进行排序。这种有序存储方式有助于在数据持久化到磁盘(HFile)时保持数据的一致性和有序性。当MemStore达到一定阈值(默认是128MB)时,会触发Flush操作,将数据持久化到磁盘上的HFile中。
- Region Server协调:
- 每个Region Server负责管理多个Region。在写入数据时,Region Server会确保数据在其管理的Region范围内的一致性。例如,对于一个更新操作,Region Server会保证旧数据被新数据正确替换,不会出现部分更新的情况。
数据读取时保障数据一致性的机制
- 读请求处理流程:
- 客户端发起读请求,首先会查询MemStore,因为MemStore中保存着最新的未持久化到磁盘的数据。如果在MemStore中找到所需数据,则直接返回,保证读取到最新数据。
- 如果在MemStore中未找到数据,会接着查询Block Cache。Block Cache缓存了HFile中的数据块,若能在Block Cache中命中,可快速返回数据。由于Block Cache会定期更新,所以能保证读取到相对较新的数据。
- 若在Block Cache中也未找到,就会从磁盘上的HFile中读取数据。HBase会通过合并操作将MemStore和HFile中的数据进行整合,确保读取到的数据是完整且一致的。
- 版本管理:
- HBase支持多版本数据存储,每个Cell(列族:列限定符:时间戳)可以保存多个版本的数据。在读取时,可以根据用户指定的时间戳或者版本号来获取特定版本的数据,保证了数据在不同时间点的一致性读取。
- 一致性模型:
- HBase采用的是最终一致性模型。虽然在写入和读取之间可能存在短暂的不一致(例如,写入后立即读取,而此时数据还未从MemStore Flush到HFile),但随着时间推移,通过MemStore的Flush、Compaction等操作,数据最终会达到一致状态。