java - Cassandra 不等待节点可用

标签 java cassandra datastax-java-driver

我正在使用 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/

相关文章:

java - 存储、检索、编辑和删除数据

javascript - Node.js 执行顺序查询

cassandra - cassandra 中的 Like 运算符

Cassandra on Kubernetes podManagementPolicy - OrderedReady 与 Parallel

java - 核心连接数必须为正误差

java - 将 POJO 序列化为 JSON - 输入参数化

java - 我不明白为什么这段代码会导致死锁

java - Java 程序中硬编码文本字符串的替代做法?

java - Cassandra 集群连接中的多个端点

cassandra - "All host(s) tried for query failed"错误