使用 datastax java 驱动程序 2.1.4 连接到 Cassandra 集群太慢

Too slow to connect to Cassandra cluster with datastax java driver 2.1.4

我最近在同一内部网络中的两台具有相同硬件配置的服务器上建立了一个只有两个节点的cassandra集群。它与 cqlsh 配合得很好,一切看起来都很完美。然后我按照datastax网站上的代码示例编写了java代码来处理集群,问题就来了。该程序运行正常,它连接到集群并成功写入和读取数据。但是,连接速度太慢了!我将代码部署在集群节点之一所在的同一台机器上,连接需要超过 5 秒。更准确地说,它是行 session = cluster.connect() 占用了大部分时间。

我尝试在同一网络中设置另一个只有一个节点的 cassandra 集群,具有相似的硬件配置。连接大约需要 1 秒。所以我认为我在编写代码时很可能错过了一些配置。我花了很多时间寻找答案,但一无所获。考虑到 5 秒的连接时间,我很难考虑用它来替代我当前的数据库。

另外,这些机器之间的ping时间都在1ms以内,所以我认为不是网络的问题。使用 cqlsh 连接到集群也非常快。

cassandra版本为2.1.4,datastax的maven依赖为

<dependency>
    <groupId>com.datastax.cassandra</groupId>
    <artifactId>cassandra-driver-core</artifactId>
    <version>2.1.4</version>
</dependency>

所以我想知道是否有人可以启发我为什么连接到只有两个节点的集群需要这么长时间。非常感谢。

这里是连接cassandra集群的代码,基本上和官网上展示的一样。

    long start = System.currentTimeMillis();
    cluster = Cluster.builder().addContactPoint(node1).addContactPoint(node2).build();
    Metadata metadata = cluster.getMetadata();
    System.out.printf("Connected to cluster: %s\n",metadata.getClusterName());
    System.out.println(metadata.getPartitioner());

    session = cluster.connect();
    long time = System.currentTimeMillis() - start;
    System.out.println("time to connect : " + time);

我相信我找到了它这么慢的原因。这仅仅是因为我在[cassandra]/conf/cassandra.yaml中将rpc_address设置为0.0.0.0。一旦我将它设置为实际的 IP 地址,连接时间从 5 秒下降到 0.2 秒。

是因为rpc地址显着影响节点发现时间吗?