java - Datastax java 驱动程序的自动故障转移不适用于 OutOfMemoryError 节点故障

标签 java cassandra datastax-java-driver

我不确定我是否遗漏了一些东西,但是每当 cassandra 节点由于 OutOfMemoryError 而关闭时,我的 DataStax Java 驱动程序就不会检测到它,并且仍然向它发送读取请求。如果我手动关闭节点,它工作正常。我使用重新连接和重试策略的默认值:

LoadBalancingPolicy loadBalancingPolicy;
        if (datacenter != null) {
            loadBalancingPolicy = new DCAwareRoundRobinPolicy(datacenter);
        } else {
            loadBalancingPolicy = new RoundRobinPolicy();
        }
        loadBalancingPolicy = new TokenAwarePolicy(loadBalancingPolicy);
        loadBalancingPolicy = LatencyAwarePolicy.builder(loadBalancingPolicy).build();

        Builder builder = Cluster.builder().addContactPoints(endpoints).withLoadBalancingPolicy(loadBalancingPolicy);

有什么建议吗?

最佳答案

whenever a cassandra node is going down due to OutOfMemoryError my DataStax Java driver is not detecting it and still sending read requests to it.

根据您的描述,我推测 Cassandra 节点 OOM,但并没有真正停止运行(进程没有退出),我怀疑如果它真的停止运行,驱动程序会检测到它。如果是这种情况,我认为这是服务器的错误行为,并且 Cassandra 确实没有在 OOM 上尽快(或根本)死亡,请参阅 CASSANDRA-7507 .

也就是说,当 Cassandra 行为不当时,驱动程序应该更好地保护您,这将通过 JAVA-426 得到改善。 .

关于java - Datastax java 驱动程序的自动故障转移不适用于 OutOfMemoryError 节点故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25399439/

相关文章:

java - 需要有关在扫雷游戏中随机地雷的方法的帮助

Java:Comparable 与 Comparator - 内存和性能

cassandra - Cassandra 读取错误

java - cassandra datastax 写入生成的代码时出现意外错误 : java. lang.NullPointerException

java - DataStax Java 驱动程序 4.0 : is object mapping going to be supported?

java - 如何使用 Hibernate 和 @WhereJoinTable 保持多对多关系?

cassandra - 当行是一次性写入时,分级压缩策略仍然有利于读取吗?

Cassandra:创建表时不能使用 'NOT NULL' 约束

java - Cassandra .setFetchSize() on 语句不被接受

java - 如何更改karaf功能的URL :install