Cassandra 2.2 的一致性和超时问题

Consistency and timeout issues with Cassandra 2.2

我使用的是 Cassandra 2.2,我的应用程序需要高度的一致性。

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

重要的是,即使一个节点宕机,我的应用程序也应该是完整的。

目前我的应用程序连接集群时存在一些一致性和超时问题。

我已经阅读了整个 Cassandra 2.2 文档,我得出的结论是,对于我的写入操作,最好的 CONSISTENCY LEVEL 应该是 QUORUM,对于我的读取操作,最好的 ONE,但我仍然有一些一致性问题。

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

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

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

对于写入操作,您将与 Replication Factor = 2Consistency Level = QUORUM 以及对于读取操作的 ONE 具有很强的一致性。但是如果一个节点宕机,写操作就会失败。在 Replication Factor = 2.

的情况下,Consistency Level = QUORUMALL 相同

你应该使用 Replication Factor = 3Consistency Level = QUORUM 进行写入和读取操作,以具有强一致性和完整的功能应用程序,即使一个节点关闭。

DELETEUPDATE 操作是写操作。

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

已更新

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

复制因子 = 2 意味着 3 个节点中的 2 个将包含数据。这些节点将是 replicas.

QUORUM 表示写入操作必须由 2 副本(当复制因子=2)而不是节点确认。

Cassandra根据partition key把数据放在各个节点上。每个节点负责 range 分区键。并非任何节点都可以存储任何数据,因此您需要有活动的副本(而不是节点)来执行操作。这里文章 about data replication and distribution.

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

另外:这里有一个simple calculator for Cassandra parameters