卡桑德拉:关于失败的记事

时间:2015-09-21 23:17:14

标签: cassandra

如果实例失败,我不太明白memtables中的数据会发生什么变化?由于写入在写入磁盘之前首先被写入内存,如果实例失败,我们是否会丢失memtable尚未写入磁盘的所有信息?例如:

1) User 1 inserts something into Cassandra:
2) My application sees it has been inserted so it gives the user a notification it has been inserted.
3) The insert is inside the instance, and it fails before the commit log was full, so a flush did not occur to disk.

用户1是否丢失了他的数据?

3 个答案:

答案 0 :(得分:2)

这取决于您如何配置commitlog。默认值是periodic,它提供更好的性能但耐用性更低,或者您可以将其设置为batch,在写入磁盘之前不会写入。查看更多信息here

答案 1 :(得分:0)

简短回答只有如果(正如@Jim Meyer所说),commitlog_sync设置为periodic所有副本崩溃收到写信后commitlog_sync_period_in_ms

答案 2 :(得分:0)

如果将数据写入commitlog,那么肯定不会丢失(除非磁盘损坏)。当节点再次启动时,将从提交日志中重放未刷新的数据。

将数据写入提交日志时,定期/批处理选项会产生影响。如果节点在写入提交日志之前失败,则仅当您处于单个复制因子时,才会丢失数据。如果复制因子多于一个,则所有节点必须同时关闭才能丢失数据。