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

Posted

技术标签:

【中文标题】使用 datastax java 驱动程序 2.1.4 连接到 Cassandra 集群的速度太慢【英文标题】:Too slow to connect to Cassandra cluster with datastax java driver 2.1.4 【发布时间】:2015-07-23 04:35:45 【问题描述】:

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

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

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

cassandra版本是2.1.4,maven依赖datastax是

<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 不是问题的根源。您应该将此视为一种症状,并在其他地方寻找问题。 【参考方案1】:

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

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

【讨论】:

你将 rpc_address 设置为什么? 我设置了 rpc_address=127.0.0.1 并重新启动了 cassandra 但它不起作用。连接本地 cassandra 实例仍然需要 5.9 秒。

以上是关于使用 datastax java 驱动程序 2.1.4 连接到 Cassandra 集群的速度太慢的主要内容,如果未能解决你的问题,请参考以下文章

Datastax Java 驱动程序 4.6.1 无法使用 application.conf 覆盖配置

Datastax Cassandra java驱动集群配置

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

Cassandra:使用 DataStax Java 驱动程序选择一系列 TimeUUID

无法使用 datastax java 驱动程序通过 UDT 键从 cassandra 检索

如何关闭数据库连接 Datastax Java 驱动程序