我正在使用 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:没有可用于执行查询的节点
有没有办法配置驱动程序/ session 以等待可用节点?
更多信息:
- 我的测试规模约为 2500000 个实体 (
myEntityList
)。 - 同步插入工作正常,但速度太慢。
- 我想用 datastax-java-driver mapper 解决这个问题,基于注释,尽可能简单。
- 驱动版本:4.9.0
最佳答案
NoNodeAvailableException
当驱动程序将所有节点标记为关闭或无响应时,或者当接触点无效(在您的情况下不太可能)时返回。
这不是让驱动程序等待节点重新联机的情况。由于驱动程序认为所有节点都不可用,因此它甚至不会尝试连接到任何节点。
查看节点上的日志以获取有关它们无响应原因的线索。如果您看到长时间的 GC 暂停和/或丢弃的读取/突变,它们是节点重载的标志。如果您正在运行负载测试,请考虑限制吞吐量,以免集群过载。干杯!
关于java - Cassandra 不等待节点可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65187106/