Cassandra如何保证跨区域复制的最终一致性?

时间:2017-07-17 20:04:25

标签: cassandra

我找不到很多关于它的文档。我唯一能找到的是当一致性级别未设置为EACH_QUORUM时,跨区域复制是异步完成的。

但是在异步风格中,是否可能丢失消息? Cassandra如何处理丢失的消息?

2 个答案:

答案 0 :(得分:1)

如果您不使用EACH_QUORUM并且接受写入的目标节点已关闭,则协调节点将写入保存为“提示切换”

当目标节点再次可用时,协调员将重放目标上的提示切换。

对于任何暗示切换丢失的场合,您必须在群集上进行修复。

此外,您必须注意默认情况下最多允许存储提示3小时。

有关详细信息,请参阅以下文档:

http://www.datastax.com/dev/blog/modern-hinted-handoff http://docs.datastax.com/en/cassandra/3.0/cassandra/operations/opsRepairNodesHintedHandoff.html

希望这有帮助。

答案 1 :(得分:1)

当您在Cassandra中发出写入时,协调器会将写入发送到所有联机副本,然后阻止。块的持续时间对应于一致性级别 - 如果您说" ALL",它将阻塞,直到所有节点都执行写入。如果您使用" EACH_QUORUM",它会阻塞,直到每个数据中心的法定数量的节点确认写入为止。

对于没有写入的任何副本,协调员将写一个提示,并尝试稍后提供该提示(分钟,小时,不保证)。

但请注意,这些写入都是同时发送的 - 您所拥有的内容是对已发送内容的保证。您的保证符合一致性。

当您阅读时,您将执行类似的操作 - 您将阻止,直到您有适当数量的副本回答。如果使用EACH_QUORUM进行编写,则可以使用LOCAL_QUORUM进行读取并保证一致性。如果你用QUORUM写作,你可以阅读QUORUM。如果你用ONE写作,如果你用ALL阅读,你仍然可以保证一致性。

为了保证最终的一致性,你不必做任何事情 - 它会最终到达那里,只要你写下CL> = ONE(CL ANY并不是真正的保证) )。