Cassandra CAS为延迟为毫秒的请求插入超时

Cassandra CAS为延迟为毫秒的请求插入超时,cassandra,datastax,Cassandra,Datastax,我们正在对cassandra群集(3个节点,复制因子3)进行负载测试,并开始在一个表上接收CAS插入操作的偶尔WriteTimeOutException: CREATE TABLE users.by_identity ( account ascii, domain ascii, identity text PRIMARY KEY ((account, domain), identity) ); 我们正在使用IF NOT E

我们正在对cassandra群集(3个节点,复制因子3)进行负载测试,并开始在一个表上接收CAS插入操作的偶尔WriteTimeOutException:

CREATE TABLE users.by_identity (
        account ascii,
        domain ascii,
        identity text
        PRIMARY KEY ((account, domain), identity)
    );
我们正在使用IF NOT EXISTS子句对此表进行插入。当一个分区的负载增加到>10次插入/秒时,客户端请求开始“超时”:

超时的WriteType是CAS,并且仅对此表引发异常。执行时间始终小于10ms。在集群上,读/写超时被配置为>1000毫秒,只有此表出现问题

你知道我们遇到的问题是什么吗?为什么延迟毫秒的请求会超时


我们使用的是Cassandra v3.0.8和Datastax Java驱动程序v3.1.0

很抱歉回答得太晚,但您可能遇到了以下问题:

您可能可以通过减少并发性来确认,这样一次只有一个请求(如果您的请求非常快,您可能仍然可以每秒执行10个快速请求,而另一个请求没有任何并发请求),然后离开群集设置(3个节点,复制系数3)或者将请求速率保持在10/s,并将群集设置更改为单个节点。如果您这样做,您可能不会看到任何小于1000毫秒的超时,然后更改回具有复制因子3的并发10和3节点,并且您可能会再次复制超时设置过低的超时

不幸的是,bug报告没有提供任何伪代码来解决这个问题,但是说您应该自己检查状态,看看是否真的发生了写操作,然后基于此重试。如果写操作是幂等的,可能只需要简单地重试


不幸的是,对于我来说,我们的应用程序相当复杂,如果没有很多其他工作,我们无法解决问题,因此我们仍然存在这个bug。如果这就是你的问题所在,我很想看看伪代码中的一个例子,看看您是如何解决这个问题的,因为它可能会为其他遇到这个问题的人提供灵感。

您的cas\U争用\U超时\u in_ms设置为什么?cas\U争用\u超时\u in_ms是1000 ms。如果没有争用,并且我们只将唯一的cas条目写入到单分区。锁是每个分区的,所以我的理解是,进入同一分区的唯一条目都会争夺同一个锁。
com.datastax.driver.core.exceptions.WriteTimeoutException: Cassandra timeout during write query at consistency SERIAL (2 replica were required but only 1 acknowledged the write)