Cassandra查询超时选择查询:
SELECT x, y FROM <table> WHERE unique_id= <value>
有这个特例
com.datastax.driver.core.exceptions.ReadTimeoutException: Cassandra timeout during read query at consistency ALL (3 responses were required but only 2 replica responded)
at com.datastax.driver.core.exceptions.ReadTimeoutException.copy(ReadTimeoutException.java:88)
at com.datastax.driver.core.exceptions.ReadTimeoutException.copy(ReadTimeoutException.java:25)
at com.datastax.driver.core.DriverThrowables.propagateCause(DriverThrowables.java:37)
at com.datastax.driver.core.DefaultResultSetFuture.getUninterruptibly(DefaultResultSetFuture.java:245)
Cassandra 司机:
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>3.5.0</version>
</dependency>
我们的查询代码:
QueryOptions queryOptions = new QueryOptions();
queryOptions.setSerialConsistencyLevel(ConsistencyLevel.LOCAL_SERIAL);
queryOptions.setConsistencyLevel(ConsistencyLevel.LOCAL_QUORUM);
List<String> contactPoints = Utils
.getArrayStrings(config, Constants.CASSANDRA_CONTACT_POINTS);
Cluster cluster = Cluster.builder()
.addContactPoints(contactPoints.toArray(new String[contactPoints.size()]))
.withQueryOptions(queryOptions)
.withProtocolVersion(ProtocolVersion.V4)
.build();
Session session = cluster.connect();
session.executeAsync(SELECT_STATEMENT).bind()
.setUUID(0, UUID.fromString(inputEvent.getUniqueId()))
当我们将查询选项一致性设置为LOCAL_QUORUM时,为什么将一致性视为ALL?
2 回答
它看起来非常像CASSANDRA-7947,如果在触发读取修复的查询中发生超时(用
ALL
执行),则报告为ALL
而不是原始LOCAL_QUORUM
. 虽然这个bug应该已经在2.0.12 / 2.1.3中修复了......我们在 生产环境 环境中遇到了同样的问题 . 看起来它与此处描述的读取修复过程有关CASSANDRA-10726 . 另外在这个重复的CASSANDRA-14480 bug中,其他人都有确切的行为 .
我们在切换到多DC环境后才注意到这个错误 .
我们正在使用这个版本:
Cassandra:3.0.15 DSE:5.0.12 Java驱动程序:3.1.4