我找不到很多关于它的文档。我唯一能找到的是当一致性级别未设置为EACH_QUORUM时,跨区域复制是异步完成的。
但是在异步风格中,是否可能丢失消息? Cassandra如何处理丢失的消息?
答案 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并不是真正的保证) )。