gpt4 book ai didi

高 IOPS 运行 5 分钟后,Cassandra 抛出 NoHostAvailableException

转载 作者:行者123 更新时间:2023-12-02 08:30:18 26 4
gpt4 key购买 nike

我正在使用 datastax cassandra 2.1 驱动程序并以大约 8000 IOPS 的速率执行读/写操作。我使用池选项来配置我的 session ,并使用单独的 session 进行读取和写入,每个 session 都连接到集群中的不同节点作为联系点。这可以正常工作 5 分钟,但之后我会遇到很多异常,例如:

Failed with: com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /10.0.1.123:9042 (com.datastax.driver.core.TransportException: [/10.0.1.123:9042] Connection has been closed), /10.0.1.56:9042 (com.datastax.driver.core.exceptions.DriverException: Timeout while trying to acquire available connection (you may want to increase the driver number of per-host connections)))

任何人都可以帮我解决可能是什么问题吗?

异常要求我增加每台主机的连接数,但我可以为此参数设置多高的值?此外,我无法将 CoreConnectionsPerHost 设置为超过 2,因为它抛出异常说 2 是最大值。

这就是我创建每个读/写 session 的方式。

   PoolingOptions poolingOpts = new PoolingOptions();
poolingOpts.setCoreConnectionsPerHost(HostDistance.REMOTE, 2);
poolingOpts.setMaxConnectionsPerHost(HostDistance.REMOTE, 200);
poolingOpts.setMaxSimultaneousRequestsPerConnectionThreshold(HostDistance.REMOTE, 128);
poolingOpts.setMinSimultaneousRequestsPerConnectionThreshold(HostDistance.REMOTE, 2);
cluster = Cluster
.builder()
.withPoolingOptions( poolingOpts )
.addContactPoint(ip)
.withRetryPolicy( DowngradingConsistencyRetryPolicy.INSTANCE )
.withReconnectionPolicy( new ConstantReconnectionPolicy( 100L ) ).build();
Session s = cluster.connect(keySpace);

最佳答案

您的问题实际上可能不在您的代码或您的连接方式中。如果您说问题在几分钟后发生,那么可能只是您的集群在尝试处理数据摄取时变得过载而无法跟上。这种情况的典型标志是当您开始在 cassandra system.log 文件中看到 JVM 垃圾收集“GC”消息时,太多的小消息单独与大消息一起批处理可能意味着传入的客户端没有响应导致这种设想。在开始查看代码之前,先确认您的日志中没有出现太多此类事件。这是大型 GC 事件的一个很好的例子:

INFO [ScheduledTasks:1] 2014-05-15 23:19:49,678 GCInspector.java (line 116) GC for ConcurrentMarkSweep: 2896 ms for 2 collections, 310563800 used; max is 8375238656

当连接到集群时,有一些建议,其中之一是每个真正的集群只有一个集群对象。根据我在下面链接的文章(如果您已经研究过,我们深表歉意):

  • 每个(物理)集群(每个应用程序生命周期)使用一个集群实例
  • 每个键空间最多使用一个 session 实例,或者使用单个 session 并在查询中明确指定键空间
  • 如果多次执行一条语句,请考虑使用准备好的语句
  • 您可以减少网络往返次数,还可以通过使用批处理进行原子操作

http://www.datastax.com/documentation/developer/java-driver/2.1/java-driver/fourSimpleRules.html

由于您正在进行大量读取,我绝对会推荐使用 setFetchSize 如果它适用于您的代码

http://www.datastax.com/documentation/developer/java-driver/2.1/common/drivers/reference/cqlStatements.html

http://www.datastax.com/documentation/developer/java-driver/2.1/java-driver/reference/queryBuilderOverview.html

如果您觉得有用,请引用此处的连接选项

http://www.datastax.com/documentation/developer/java-driver/2.1/common/drivers/reference/connectionsOptions_c.html

希望这对您有所帮助。

关于高 IOPS 运行 5 分钟后,Cassandra 抛出 NoHostAvailableException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27657424/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com