面试题答案
一键面试- 写入过程:
- 当客户端向Cassandra节点写入数据时,数据首先被写入提交日志(Commit Log),然后才会写入Memtable。提交日志是一个顺序写入的日志文件,这种顺序写入的方式效率较高。例如,假设客户端要写入一条用户信息数据,此数据会立即被追加到提交日志文件末尾。
- 故障恢复机制:
- 节点故障场景:如果在数据还未从Memtable刷写到SSTable(Sorted String Table,持久化存储文件)时节点发生故障,当节点重启后,Cassandra会利用提交日志来恢复未持久化的数据。因为提交日志记录了所有未完成持久化操作的数据写入。例如,节点在写入10条数据到Memtable但还未刷写时故障,重启后可依据提交日志重放这10条数据写入操作。
- 数据一致性保障:提交日志确保了即使在节点故障时,已经成功写入提交日志的数据不会丢失。这就维持了数据的基本一致性,因为其他节点不会看到部分写入的状态。比如,在一个多节点的Cassandra集群中,若某个节点写入数据未完成持久化就故障,其他节点不会感知到这个不完整的写入,当故障节点恢复后通过提交日志恢复数据,从而保证了整个集群数据的一致性状态。
- 提交日志轮转与清理:
- 为防止提交日志无限增长,Cassandra会进行日志轮转。当提交日志达到一定大小或者经过一定时间后,会创建新的提交日志文件。旧的提交日志文件在其中的数据成功刷写到SSTable后会被清理。例如,当一个提交日志文件达到1GB大小时,系统会创建新的提交日志文件继续写入,同时在旧文件数据成功持久化到SSTable后将其删除,这样既能持续保障数据一致性,又能合理管理存储资源。