将来自社区的Apache Cassandra专家和DataStax聚集在一起。

想学习吗?有一个问题?想分享您的专业知识吗?你是在正确的地方!

不知道从哪里开始? 入门

 

问题

 kallmekunal_131749 头像图片
kallmekunal_131749 ·

从Java驱动程序3.5升级到4.9后获取DriverTimeoutException

我已经从DSE 3.5升级到4.9到我的产品。已经注意到微服务功能的下降。 TPS下降了15%。在一定水平之后

com.datastax.oss.driver.api.core.DriverTimeoutException: Query timed out after PT2S
    at com.datastax.oss.driver.api.core.DriverTimeoutException.copy(DriverTimeoutException.java:34)
    at com.datastax.oss.driver.internal.core.util.concurrent.CompletableFutures.getUninterruptibly(CompletableFutures.java:149)
    at com.datastax.oss.driver.internal.core.cql.CqlRequestSyncProcessor.process(CqlRequestSyncProcessor.java:53)
    at com.datastax.oss.driver.internal.core.cql.CqlRequestSyncProces

实验性地将超时时间从默认的2秒增加到30秒。

则超时会按预期消失,但服务器有时会向客户端提供服务不可用503。

驱动程序配置:

final DriverConfigLoader configLoader = DriverConfigLoader.programmaticBuilder()
        .withString(DefaultDriverOption.REQUEST_CONSISTENCY, ConsistencyLevel.LOCAL_QUORUM.name())
        .withString(DefaultDriverOption.RECONNECTION_POLICY_CLASS, ExponentialReconnectionPolicy.class.getName())
        .withInt(DefaultDriverOption.RECONNECTION_BASE_DELAY, baseReconnectionIntervalSec * 1000)
        .withInt(DefaultDriverOption.RECONNECTION_MAX_DELAY, maxReconnectionIntervalSec * 1000)
        .withDuration(DefaultDriverOption.REQUEST_TIMEOUT, Duration.ofSeconds(30))//Test changes for driver timeout
        .withString(DefaultDriverOption.RETRY_POLICY_CLASS, CassandraCustomRetryPolicyXXXX.class.getName()).build();
Java驱动
10 | 1000 所需字符 剩余字符 超出字符

最多可以使用8个附件(包括图像),每个附件最多1.0 MiB,总共10.0 MiB。

1 回答

 埃里克·拉米雷斯(Erick Ramirez) 头像图片
埃里克·拉米雷斯(Erick Ramirez) 已回答 ·

查询超时表明您有昂贵的查询。例如,当使用 IN 有多个键的运算符。

之前, Java驱动程序3.5中的默认客户端超时为12秒。在Java驱动程序4.9中,该时间减少到了2秒,因为通常接受的查询时间超过2秒的时间过长,除非情况非常有限。

超时阈值较低的原因是,驱动程序会在较短的时间内放弃查询,并释放供其他请求使用的连接。

当您将超时值增加到一个过高的值(如30秒)时,驱动程序将保持连接打开状态并等待很长一段时间才能获得响应。如果您的微服务正在发出多个昂贵的请求,那么您将陷入这种情况,即昂贵的查询阻碍了连接,而您的应用程序正在等待释放连接而不是超时。

附带说明,我们建议使用以下命令配置驱动程序选项 参考配置文件。在应用程序中使用配置文件而不是硬编码值意味着您无需每次更改驱动程序选项时都重新编译应用程序。干杯!

分享
10 | 1000 所需字符 剩余字符 超出字符

最多可以使用8个附件(包括图像),每个附件最多1.0 MiB,总共10.0 MiB。