多线程时Datastax Cassandra NoNodeAvailableException

Datastax Cassandra NoNodeAvailableException when multithreading

我正在尝试在 Java 中构建多线程 Cassandra 导入器。我正在使用这个包:
group: 'com.datastax.cassandra', name: 'cassandra-driver-core', version: '4.0.0'

单线程(使用主线程)工作正常,但即使有 1 个子线程,我也会立即收到 com.datastax.oss.driver.api.core.NoNodeAvailableException: No node was available to execute the query

我正在 Docker 中的 cassandra 实例上测试我的应用程序(希望这不是问题所在)。这是我的生成器。

            session = CqlSession.builder()
                    .addContactPoint(new InetSocketAddress("localhost", 9042))
                    .withKeyspace(CqlIdentifier.fromCql("links"))
                    .withLocalDatacenter("datacenter1")
                    .build();

这就是我执行查询的方式

        JSONObject json = new JSONObject(linksRow);
        JsonInsert query = insertInto("links").json(json.toString());
        session.execute(query.toString());

你能告诉我我做错了什么吗?根据文档,CqlSession 应该是线程安全的。 (https://docs.datastax.com/en/developer/java-driver/4.0/manual/core/)

编辑:添加了插入查询

JsonInsert query = insertInto("links").json(json.toString());

这些查询 运行 是否一直在每个线程上?

可能是本地的单个 Cassandra 节点没有足够的资源来处理多个请求。这将导致 Cassandra return 该节点对客户端“不可用”。

Cassandra 的 Java 堆有多大?它可能需要更大。也可能是本地系统与 运行 Cassandra、multi-threaded 应用程序以及其他可能 运行.

发生的事情太多了

基本上,检查 conf/jvm-server.options 的“HEAP SETTINGS”。如果堆正在“自动计算”,它可能对于应用程序试图用它做的事情来说太小了。