我找不到關於它的很多文檔。我唯一可以找到的是,當一致性級別未設置爲EACH_QUORUM時,跨區域複製是異步完成的。Cassandra如何保證跨區域複製的最終一致性?
但在異步風格,是有可能失去消息?卡桑德拉如何處理丟失的消息?
我找不到關於它的很多文檔。我唯一可以找到的是,當一致性級別未設置爲EACH_QUORUM時,跨區域複製是異步完成的。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
希望這有助於。
當你發出的卡桑德拉寫,協調並將寫入到所有在線副本,然後塊。塊的持續時間對應於一致性級別 - 如果您說「全部」,它會阻塞,直到所有節點都確認寫入。如果使用「EACH_QUORUM」,則會阻塞,直到每個數據中心的法定節點數達到寫入的數量。
對於沒有確認寫入的任何副本,協調員將編寫一個提示,並在稍後嘗試提供該提示(分鐘,小時,無法保證)。
但是,請注意,所有寫入都是在同一時間發送的 - 您沒有的是保證所發送的是哪一個。您的保證符合一致性水平。
當你閱讀時,你會做類似的事情 - 你會阻止,直到你有一個適當數量的副本應答。如果您使用EACH_QUORUM編寫代碼,則可以使用LOCAL_QUORUM進行讀取並保證一致性。如果你用QUORUM編寫,你可以用QUORUM讀取。如果您使用ONE編寫,如果您使用ALL閱讀,仍然可以保證強大的一致性。爲了保證最終的一致性,你不需要做任何事情 - 只要你用CL> = ONE(CL ANY並不是真正的保證)來寫就可以最終達到目標。
Thx,我明白這一部分。我感到困惑的是C *如何處理跨DC複製。由於它是異步的,它是最好的努力還是有其他機制來保證數據最終被複制? – silverwen
沒有其他機制。在編寫,讀取修復,主動修復和提示時發送突變。除此之外,沒有其他複製機制(DC內或DC間)。 –
THX,所以這也是用於跨DC複製? – silverwen
是的,當你使用多個數據中心,唯一的區別是,你有更多的一致性級別可供選擇。例如,當執行讀寫時,LOCAL_QUORUM將嘗試在本地達成一致。 [卡桑德拉一致性水平](http://docs.datastax.com/en/cassandra/latest/cassandra/dml/dmlConfigConsistency.html) – Oresztesz