首页 > 解决方案 > Cassandra 不等待节点可用

问题描述

我正在使用 java 的 datastax 驱动程序:

@Dao
public interface MyDao {
    @Insert
    CompletableFuture<Void> save(MyEntity entity);
    ...
}

public class MyDaoTests {
    
    @Test
    public void myTest() {
    ...
    List<CompletableFuture<Void>> futureList = myEntityList.parallelStream()
             .map((myEntity) -> meterDataMapper.myDao().save(myEntity))
             .collect(Collectors.toList());
    CompletableFuture.allOf(futureList.toArray(CompletableFuture[]::new)).join();
    ...
   }
}

当我执行测试时,我得到这个错误:
java.util.concurrent.CompletionException: com.datastax.oss.driver.api.core.NoNodeAvailableException: No node was available to execute the query

有没有办法配置驱动程序/会话以等待可用节点?

更多信息:

标签: javacassandradatastax-java-driver

解决方案


NoNodeAvailableException驱动程序将所有节点标记为关闭或无响应,或者接触点无效(在您的情况下不太可能)时,将返回 。

这不是让驱动程序等待节点重新联机的情况。由于驱动程序认为所有节点都不可用,因此它甚至不会尝试连接到任何节点。

查看节点上的日志以获取有关它们为何无响应的线索。如果您看到长时间的 GC 暂停和/或丢弃的读取/突变,则表明节点已超载。如果您正在运行负载测试,请考虑限制吞吐量,以免集群过载。干杯!


推荐阅读