【问题标题】:Cassandra queries are timing out, taking consistency as ALL when explicitly specified as LOCAL_QUORUMCassandra 查询超时,当明确指定为 LOCAL_QUORUM 时将一致性视为 ALL
【发布时间】:2018-09-01 17:27:08
【问题描述】:

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)

卡桑德拉司机:

<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?

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    我们在生产环境中遇到了同样的问题。看起来它与此处CASSANDRA-10726 中描述的读取修复过程有关。同样在这个重复的 CASSANDRA-14480 错误中,其他人也有同样的行为。

    我们只是在切换到多 DC 环境后才注意到此错误。

    我们正在使用这个版本:

    卡桑德拉:3.0.15 DSE:5.0.12 Java 驱动程序:3.1.4

    【讨论】:

      【解决方案2】:

      它看起来很像CASSANDRA-7947,如果在触发读取修复的查询中发生超时(使用ALL 执行),则报告为ALL 而不是原来的LOCAL_QUORUM。虽然这个 bug 应该已经在 2.0.12/2.1.3 中修复了...

      【讨论】:

      • 我使用的Cassandra版本是3.0.14.10
      • 我认为我最近看到了一个与读取修复有关的错误,但不是读取修复本身...
      猜你喜欢
      • 2021-12-14
      • 2021-11-13
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      • 2016-03-17
      • 2018-02-15
      • 2020-10-23
      相关资源
      最近更新 更多