面试题答案
一键面试写操作实现数据一致性
- 组件
- 客户端:负责发起写请求,将数据发送到HBase集群。
- RegionServer:负责实际的数据存储和写入操作。每个RegionServer管理着多个Region,Region是HBase数据存储的基本单位。
- HLog(Write - Ahead Log):预写式日志,用于保证数据的持久性。当RegionServer接收到写请求时,首先将数据写入HLog。
- 关键流程
- 客户端向RegionServer发送Put请求。
- RegionServer接收到请求后,先将数据写入HLog,这一步确保即使在写入MemStore(内存存储)过程中发生故障,数据也不会丢失。
- 接着将数据写入MemStore,MemStore是一个内存中的数据结构,按照Key - Value对进行排序存储。
- 当MemStore达到一定阈值(通常由配置参数决定),会触发Flush操作,将MemStore中的数据写入StoreFile(磁盘上的HFile)。这个过程是异步的,且Flush操作会保证数据的一致性,因为写入磁盘的数据是经过排序且完整的。
读操作实现数据一致性
- 组件
- 客户端:发起读请求,从HBase集群获取数据。
- RegionServer:处理读请求,从存储中读取数据并返回给客户端。
- MemStore:内存中的存储,可能包含最新写入但尚未Flush到磁盘的数据。
- StoreFile(HFile):磁盘上存储数据的文件,包含持久化的数据。
- 关键流程
- 客户端向RegionServer发送Get请求。
- RegionServer接收到请求后,首先在MemStore中查找数据。如果能在MemStore中找到,直接返回数据,因为MemStore中的数据是最新的。
- 如果在MemStore中未找到,则从StoreFile(HFile)中查找。HBase使用Bloom Filter(布隆过滤器,可配置)来快速判断某个Key是否可能存在于某个HFile中,以减少不必要的磁盘I/O。如果判断可能存在,则从HFile中读取数据。
- 为了确保强一致性,HBase会保证读取到的数据是经过所有已提交的写操作更新后的结果。在读取过程中,会考虑到MemStore和StoreFile中的数据合并,保证返回给客户端的数据是最新且一致的。