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