面试题答案
一键面试HBase 一致性模型
HBase 遵循的是最终一致性模型。在 HBase 中,数据写入首先会进入 WAL(Write-Ahead Log)和 MemStore 中。当 MemStore 达到一定阈值时,会刷写到 HFile 中。由于数据的更新并非即时同步到所有副本,所以不同客户端读取数据时,可能会读到不同版本的数据。但是,随着时间推移,HBase 内部的复制和同步机制会保证所有副本的数据最终达到一致。
故障时基于一致性模型的容错策略
节点崩溃
- WAL 恢复:当节点崩溃后,重启时会从 WAL 中重放未持久化到 HFile 的数据修改操作。因为 WAL 是按顺序写入的,所以可以确保崩溃前的所有写操作都能被恢复,保证数据的完整性。
- 副本修复:HBase 采用多副本机制(通常为 3 个副本)。主副本所在节点崩溃后,从副本会被提升为主副本继续提供服务。同时,HBase 会在其他节点上重新创建缺失的副本,以维持副本数量,确保数据的冗余和可用性。这个过程基于 HBase 的最终一致性模型,新创建的副本会逐渐与其他副本同步数据,最终达到一致状态。
网络分区
- 分区内处理:在网络分区期间,每个分区内的节点继续处理本地的读写请求。由于 HBase 的最终一致性模型,在每个分区内数据的读写操作可以正常进行,只是分区之间的数据同步暂时中断。
- 分区合并:当网络分区恢复后,HBase 会启动数据同步过程。不同分区间的数据差异会通过复制和合并操作进行修复。例如,通过比较不同分区中数据的版本号等信息,将较新的数据更新到其他分区,从而在整个集群范围内恢复数据的一致性,确保事务的最终一致性和数据完整性。