Cassandra写入一致性:写入事务失败后的处理机制疑问
Cassandra QUORUM级别写入失败后的副本处理逻辑
你描述的场景默认对应副本数(RF)=3,QUORUM级别的写入要求至少2个副本写入成功才会返回成功,未达到该阈值时你会收到写入错误,对应问题的具体说明如下:
1. 已成功写入该记录的节点上的数据会如何处理?
- 已经写入成功的节点会完整保留该条记录,Cassandra不存在针对普通写入的回滚机制。
- 写入请求到达副本节点后,只要完成提交日志(
commitlog)落盘和内存表(memtable)写入,就会被节点视为有效数据,不会因为全局写入未达到一致性级别要求被删除。
2. Cassandra如何避免该行数据通过副本同步扩散到其他节点?
- Cassandra没有内置的阻止机制来避免这类部分写入的记录扩散。
- 后续的Hinted Handoff、读修复、定期反熵修复等副本同步机制,都会把已写入的副本数据同步到其他未写入的对应节点,最终达成副本一致。
3. 收到写入错误是否意味着该行数据仍可能在一段时间后出现在所有副本上?
- 是的,只要至少有1个副本成功写入了该记录,后续的副本同步流程就会逐步把该数据同步到所有对应副本,最终所有节点都会存在这条记录。
补充说明:如果需要避免写入失败后残留部分副本数据,可以使用Cassandra的轻量级事务(LWT)进行条件写入,LWT基于Paxos共识算法实现,未完成全局共识的写入不会在任何节点留存有效数据。
内容的提问来源于stack exchange,提问作者user2674414
相关产品推荐
相关产品推荐

