首页 文章

带有DataStax Java驱动程序的Cassandra 1000并发请求的NoHostAvailableException

提问于
浏览
1

The setup:

-2节点Cassandra 2.0.7.31集群
-replicas = 1

  • 使用默认配置
  • 使用DataStax java驱动程序1.0

Activity 使用QueyBuilder类的简单插入查询

Result

com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /10.181.13.239 ([/10.181.13.239] Unexpected exception triggered))
            at com.datastax.driver.core.exceptions.NoHostAvailableException.copy(NoHostAvailableException.java:64)
            at com.datastax.driver.core.ResultSetFuture.extractCauseFromExecutionException(ResultSetFuture.java:214)
            at com.datastax.driver.core.ResultSetFuture.getUninterruptibly(ResultSetFuture.java:169)
            at com.jpmc.es.rtm.storage.impl.EventExtract.main(EventExtract.java:36)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:601)
            at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /10.181.13.239 ([/10.181.13.239] Unexpected exception triggered))
            at com.datastax.driver.core.RequestHandler.sendRequest(RequestHandler.java:98)
            at com.datastax.driver.core.RequestHandler$1.run(RequestHandler.java:165)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)

2 回答

  • 1

    问题是,在我的最后,我创建了一个线程一个连接模型 . 这是非常同步的 . 但是Datstax驱动程序异步工作(我猜它使用netty)并在单个连接上接受多个请求 . 所以在我的情况下,我为每个请求一个会话,猜猜是什么?我已经离开了开放式连接b / w Driver和Cassandra . 服务器被阻塞,驱动程序也是如此 . 只需让Driver管理其池就可以解决问题 .

    默认情况下,Datastax java驱动程序保持最小连接量以处理一定量的并发请求 .
    规范说驱动程序在每个连接最多128个请求时有一个处理限制 . 所以当我们驱动程序发现超过128个请求即将到来然后它只打开连接 . 所以Driver正在精心管理连接池 . [http://www.datastax.com/drivers/java/2.0/com/datastax/driver/core/PoolingOptions.html]此链接很有帮助

  • 0

    转到你的cassandra.yaml文件 . 它将出现在cassandra安装的 conf 文件夹中 .

    对于listen_address,给出cassandra服务器的IP地址 . 例如 .

    listen_address: 10.181.13.239
    

    然后重新启动cassandra服务器 . 另外,请注意未检查本机传输的端口 . 应该有一个条目

    native_transport_port: 9042
    

相关问题