我正在嘗試用 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/)
編輯:添加了插入查詢
uj5u.com熱心網友回復:
JsonInsert query = insertInto("links").json(json.toString());
這些查詢是否在每個執行緒上不斷運行?
可能是本地的單個 Cassandra 節點沒有足夠的資源來處理多個請求。這將導致 Cassandra 向客戶端回傳節點“不可用”。
Cassandra 的 Java 堆有多大?它可能需要更大。也可能是本地系統在運行 Cassandra、多執行緒應用程式以及任何其他可能正在運行的東西方面發生了太多事情。
基本上,檢查conf/jvm-server.options. 如果堆正在“自動計算”,那么對于應用程式試圖用它做的事情來說,它可能太小了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/431610.html
上一篇:多架構dockerbuildpythonarm64命令'('lsb_release','-a')'回傳非零退出狀態1
