延迟为毫秒的请求的Cassandra CAS插入超时 [英] Cassandra CAS INSERT timeouts for requests with milliseconds latency

查看:0
本文介绍了延迟为毫秒的请求的Cassandra CAS插入超时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们正在对我们的Cassandra集群(3个节点,复制系数3)进行负载测试,并且开始偶尔收到WriteTimeoutExceptions,用于一个表上的CAS插入操作:

CREATE TABLE users.by_identity (
        account ascii,
        domain ascii,
        identity text
        PRIMARY KEY ((account, domain), identity)
    );

我们正在使用IF NOT EXISTS子句插入此表。当一个分区的负载增加到大于10次插入/秒时,客户端请求开始"超时":

com.datastax.driver.core.exceptions.WriteTimeoutException: Cassandra timeout during write query at consistency SERIAL (2 replica were required but only 1 acknowledged the write)

超时的WriteType为CAS,仅此表引发异常。执行时间始终为<;10ms。群集上的读/写超时配置为>1000毫秒,只有此表遇到问题。

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

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

推荐答案

很抱歉回答晚了,但您可能遇到了此错误:https://issues.apache.org/jira/browse/CASSANDRA-9328

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

不幸的是,错误报告没有提供任何伪代码来解决这个问题,而是说您应该自己检查状态,以查看是否确实发生了写入,并基于此进行重试。如果您的写入是幂等的,那么您可能只需要简单地重试。

不幸的是,就我的目的而言,我们的应用程序相当复杂,如果没有很多其他工作,我们无法解决问题,因此我们仍然生活在这个错误中。如果这最终是您遇到的问题,我很有兴趣看到一个伪代码示例,说明您是如何解决这个问题的,因为它可能会为其他遇到这个问题的人提供灵感。

这篇关于延迟为毫秒的请求的Cassandra CAS插入超时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆