Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从cassandra读取时,一致性级别会发生变化_Cassandra_Cql_Datastax_Datastax Java Driver - Fatal编程技术网

从cassandra读取时,一致性级别会发生变化

从cassandra读取时,一致性级别会发生变化,cassandra,cql,datastax,datastax-java-driver,Cassandra,Cql,Datastax,Datastax Java Driver,我有10个节点的cassandra集群,复制因子为{DC1:3,DC2:2}。DC1在rack1中有6个节点,DC2在rack1中有4个节点。我正在发出一致性级别为LocalQuorum的读取请求。尽管我在每个查询中设置了一致性级别,但有时它会返回以下错误: com.datastax.driver.core.exceptions.ReadTimeoutException:Cassandra 读取一致性查询期间超时(共收到5个响应) 需要,但只有3个副本响应) 我使用的是cassandra 2.0

我有10个节点的cassandra集群,复制因子为{DC1:3,DC2:2}。DC1在rack1中有6个节点,DC2在rack1中有4个节点。我正在发出一致性级别为LocalQuorum的读取请求。尽管我在每个查询中设置了一致性级别,但有时它会返回以下错误:

com.datastax.driver.core.exceptions.ReadTimeoutException:Cassandra 读取一致性查询期间超时(共收到5个响应) 需要,但只有3个副本响应)

我使用的是cassandra 2.0.9和datastax java驱动程序版本2.0.5。在nodetool状态下,它显示所有节点都正常运行。我怎样才能克服这个问题?一致性级别如何更改为ALL

集群建设:

private static Cluster constructCluster(String hostName,String port) {
    String[] hostNames = hostName.split(",");
    SocketOptions sOptions = new SocketOptions();
    sOptions.setKeepAlive(true);
    QueryOptions qOptions = new QueryOptions().setConsistencyLevel(ConsistencyLevel.LOCAL_QUORUM)
            .setFetchSize(500);
    LatencyAwarePolicy loadBalancingPolicy = LatencyAwarePolicy.builder(new DCAwareRoundRobinPolicy(defaultDC))
            .build();
    Cluster cluster = Cluster.builder()
            .addContactPoints(hostNames)
            //.withCompression(Compression.SNAPPY)
            .withLoadBalancingPolicy(loadBalancingPolicy)
            .withPoolingOptions(new PoolingOptions())
            .withQueryOptions(qOptions)
            .withReconnectionPolicy(new ConstantReconnectionPolicy(TimeUnit.SECONDS.toMillis(5)))
            .withRetryPolicy(new LoggingRetryPolicy(DefaultRetryPolicy.INSTANCE))
            .withSocketOptions(sOptions)
            .build();
    return cluster;
}
数据检索:

Cluster cluster = constructCluster(hosts, null);
Session session = cluster.connect("mykeyspace");
Statement stmt = QueryBuilder.select().all().from(cf).where(QueryBuilder.eq("key", row_key)).setConsistencyLevel(ConsistencyLevel.LOCAL_QUORUM);
ResultSet resultSet = session.execute(stmt);

您的问题看起来很像导致的问题,因为查看您的代码我没有看到任何错误

正如我在第二期中看到的,它在2.0.12和2.1.3中已经修复,所以您可能需要更新版本


我们也有同样的问题,基本上错误消息是误导性的,当仲裁请求的校验和不匹配时,它会用CL ALL发出读取修复,如果超时,它会给出此错误消息

您能使用Java驱动程序显示您的源代码吗?在使用datastax Java驱动程序时,此错误经常发生。但在使用hector时,不会发生此错误。你能解释一下为什么吗?