1

我正在使用 Cassandra 2.2,并且我有一个需要高度一致性的应用程序。

我已经配置了一个具有 3 个节点的数据中心集群。我的密钥空间是用replication_factor2 个创建的。在每个 configuration.yaml 文件中,我设置了 2 个 seed_providers(例如 NODE_1 和 NODE_3)。

重要的是,即使一个节点关闭,我的应用程序也应该是全功能的。

目前,当我的应用程序联系集群时,我在一致性和超时方面存在一些问题。

我已经阅读了整个 Cassandra 2.2 文档,并得出结论认为最CONSISTENCY LEVEL适合我的写操作应该是QUORUM和我的读操作ONE,但我仍然有一些一致性问题。

首先,具有强一致性水平是正确的选择吗?而且,操作是否UPDATEDELETE视为写入或读取操作,因为例如带有WHERE子句的更新操作仍然必须“读取”数据?我不确定,特别是在 cassandra 的写入工作流程的上下文中。

我的第二个问题是写操作期间的超时。即使我所有的 3 个节点都已启动,一个简单而轻量级的INSERT有时会得到“ ”或某些情况甚至“... 0 确认”。Cassandra timeout during write query at consistency QUORUM (2 replicas were required but only 1 acknowledged the write)

是否还有一些其他参数需要检查,例如 write_request_timeout_in_ms,默认值为 2000 毫秒(这已经是一个很高的值)?

4

1 回答 1

0

对于写操作和Replication Factor = 2读操作,您将具有强一致性。但是如果一个节点宕机了,写操作就会失败。与case相同。Consistency Level = QUORUMONEConsistency Level = QUORUMALLReplication Factor = 2

您应该将Replication Factor = 3andConsistency Level = QUORUM用于写入和读取操作,即使一个节点已关闭,也应具有强一致性和功能齐全的应用程序。

DELETEUPDATE操作是写操作。

对于超时问题,请提供失败的表模型和查询。

更新

一致性级别适用于副本,而不是节点。

复制因子 = 2 意味着 3 个节点中有 2 个将包含数据。这些节点将是副本

QUORUM 意味着写入操作必须由 2 个副本确认(当复制因子 = 2 时),而不是节点。

Cassandra 根据分区键将数据放在每个节点上。每个节点负责一系列分区键。不是任何节点都可以存储任何数据,因此您需要有活动的副本(不是节点)来执行操作。这里有关于数据复制和分发的文章。

当您对具有 3 个活动节点中的 2 个的集群执行 QUORUM 写入请求时,集群有可能只有 1 个用于分区键的活动副本,在这种情况下,写入请求将失败。

另外:这是一个简单的 Cassandra 参数计算器

于 2016-11-22T13:18:06.110 回答