cassandra不会等待节点可用

j2qf4p5b  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(392)

我正在使用用于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 有没有办法将驱动程序/会话配置为等待可用节点?
更多信息:
我的测试规模约为2500000个实体( myEntityList ).
同步插入工作正常,但速度太慢了。
我想用datastaxjava驱动Map器解决这个问题,基于注解,尽可能简单。
驱动程序版本:4.9.0

jtjikinw

jtjikinw1#

这个 NoNodeAvailableException 当驱动程序将所有节点标记为关闭或无响应时,或者当接触点无效时(在您的情况下不太可能)返回。
这不是让驱动程序等待节点重新联机的情况。因为驱动程序认为所有节点都不可用,所以它甚至不尝试连接到任何节点。
查看节点上的日志,以找到它们没有响应的原因。如果您看到长时间的gc暂停和/或丢弃的读取/突变,则表明节点过载。如果正在运行负载测试,请考虑限制吞吐量,以免集群过载。干杯!

相关问题