【发布时间】:2017-07-18 12:41:38
【问题描述】:
我找不到太多关于它的文档。我唯一能发现的是,当一致性级别没有设置为 EACH_QUORUM 时,跨区域复制是异步完成的。
但是在异步样式中,是否有可能丢失消息? Cassandra 如何处理丢失的消息?
【问题讨论】:
标签: cassandra
我找不到太多关于它的文档。我唯一能发现的是,当一致性级别没有设置为 EACH_QUORUM 时,跨区域复制是异步完成的。
但是在异步样式中,是否有可能丢失消息? Cassandra 如何处理丢失的消息?
【问题讨论】:
标签: cassandra
如果您不使用 EACH_QUORUM 并且可以接受写入的目标节点已关闭,则协调节点会将写入保存为 “提示切换”。
当目标节点再次可用时,协调器在目标上重放提示的切换。
对于任何提示切换丢失的情况,您必须对集群进行修复。
您还必须注意,默认情况下最多允许存储提示 3 小时。
有关详细信息,请参阅文档:
http://www.datastax.com/dev/blog/modern-hinted-handoff http://docs.datastax.com/en/cassandra/3.0/cassandra/operations/opsRepairNodesHintedHandoff.html
希望这会有所帮助。
【讨论】:
当您在 Cassandra 中发出写入时,协调器会将写入发送到所有在线副本,然后阻塞。块的持续时间对应于一致性级别 - 如果你说“ALL”,它会阻塞直到所有节点都确认写入。如果您使用“EACH_QUORUM”,它会阻塞,直到每个数据中心中的法定节点数确认写入。
对于未确认写入的任何副本,协调器将写入提示,并尝试稍后传递该提示(分钟,小时,不保证)。
但请注意,所有写入都是同时发送的 - 您没有保证哪些已发送。您的保证是在一致性级别。
当你阅读时,你会做类似的事情——你会阻塞,直到你有适当数量的副本回答。如果你用 EACH_QUORUM 写,你可以用 LOCAL_QUORUM 读,并保证强一致性。如果你用 QUORUM 写,你可以用 QUORUM 读。如果用 ONE 写,用 ALL 读仍然可以保证强一致性。
为了保证最终的一致性,您不必做任何事情 - 它最终会到达那里,只要您使用 CL >= ONE 编写(CL ANY 并不是真正的保证)。
【讨论】: