Cassandra 2.2的一致性和超时问题

时间:2016-11-19 23:42:07

标签: cassandra timeout consistency cassandra-2.2

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

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

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

目前,当我的应用与群集联系时,我遇到了一致性和超时问题。

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

首先,拥有强大的一致性是否是正确的选择? 此外,UPDATEDELETE操作是否被视为写入或读取操作,因为例如带有WHERE子句的更新操作仍然必须“读取”数据?我不确定,在cassandra'写工作流程的背景下是空间的。

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

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

1 个答案:

答案 0 :(得分:0)

对于写操作,您将与Replication Factor = 2Consistency Level = QUORUM具有很强的一致性,对于读取操作,您将与ONE具有很强的一致性。但是如果一个节点关闭,写操作将失败。在Consistency Level = QUORUM的情况下,ALLReplication Factor = 2相同。

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

DELETEUPDATE操作是写操作。

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

<强>更新

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

复制因子= 2表示3个节点中的2个将包含数据。这些节点将是副本

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

Cassandra根据分区键将数据放在每个节点上。每个节点负责范围的分区键。没有任何节点可以存储任何数据,因此您需要具有活动副本(而不是节点)来执行操作。这篇文章about data replication and distribution

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

另外:这是simple calculator for Cassandra parameters