Cassandra Read/Write NetworkTopologyStrategy 中的一致性级别

Cassandra Read/Write CONSISTENCY Level in NetworkTopologyStrategy

我在 2 个数据中心设置了 cassandra,每个数据中心有 4 个节点,每个节点的复制因子为 2。

一致性级别为 ONE(默认设置)

我在尝试读取一致性级别为 ONE 的数据时遇到了一致性问题。 正如 DataStax 文档中所读,一致性级别(读取 + 写入)应大于复制因子。

我决定将写入一致性级别更改为两个,将读取一致性级别更改为一个,这解决了单个数据中心的不一致问题。 但是在多个数据中心的情况下,这个问题将通过LOCAL_QUORUM 的一致性级别来解决。

我将如何实现写入应该是 (LOCAL_QUORUM + TWO) 以便我应该写入本地数据中心以及 2 个节点。

只需在您想要的数据中心使用 LOCAL_QUORUM 写入即可。如果每个数据中心的复制因子都是 2,那么您在 "local" 数据中心写入的数据最终将被复制到 "other" 数据中心(但您无法保证何时)。

LOCAL_QUORUM 表示:"after the write operation returns, data has been effectively writen on a quorum of nodes in the local datacenter"

TWO 表示:"after the write operation returns, data has been writen on at least 2 nodes in any of the datacenter"

如果要在同一个数据中心读取刚用LOCAL_QUORUM写入的数据,应该使用LOCAL_ONE一致性。如果您使用 ONE 阅读,那么最近的副本有可能位于 "remote" 数据中心,因此尚未被 Cassandra 复制。

这也取决于驱动级别配置的负载均衡策略。您可以在此处阅读更多相关信息:https://datastax.github.io/java-driver/manual/load_balancing/