当前位置: 首页 > 知识库问答 >
问题:

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

爱唯
2023-03-14

我最近在同一个内网的两台硬件配置完全相同的服务器上搭建了一个只有两个节点的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>

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

这是连接到卡桑德拉集群的代码,基本上它与其网站上显示的相同。

    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);

共有1个答案

杨和蔼
2023-03-14

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

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

 类似资料:
  • 我目前正在创建一个API,它使用具有3个节点的Cassandra集群来存储数据。我使用PHP 5.6.17、Cassandra 2.2.3和Datastax PHP Driver 1.1.0在本地机器上开发它,一切都很顺利。 但是,我们决定迁移到远程 Cassandra 集群(带有本机协议 4 的 3.4),我无法通过 PHP 访问它,因为我收到以下错误:发生错误:16777226 - 没有可用于

  • 当Datastax Java Cassandra驱动程序试图连接到您的集群时,如何让它超时? 我特别感兴趣的是当主机可以访问,但Cassandra端口被阻塞或Cassandr守护进程未运行时的情况。我正在编写一个命令行客户端,如果它不能在合理的时间内连接,它应该退出并报告适当的错误消息。目前,如果接触点可以到达,驾驶员似乎会永远等待接触点的响应。 也就是说,如果驱动程序在给定的最长时间内无法与任何

  • 代码: 输出: Traceback(最近一次调用last):文件“C:/Users/RV CSP/pycharm projects/untitled 25/hotel . py”,第9行,在session = cluster.connect('dbsi ')文件“C:\ Users \ RV CSP \ AppData \ Roaming \ Python \ Python 36 \ site-p

  • 我试图理解Datastax Cassandra驱动程序中的连池,因此我可以更好地在我的Web服务中使用它。 我有留档的1.0版。它说: Java驱动程序异步使用连接,因此可以在同一个连接上同时提交多个请求。 他们通过连接理解什么?当连接到集群时,我们有:一个生成器、一个集群和一个会话。他们中的哪一个是连接? 例如,有一个参数: MaxSimultaneousRecestsPerConnection

  • 问题内容: 我正在使用datastax Java驱动程序3.1.0连接到cassandra集群,而我的cassandra集群版本是2.0.10。 下面是我用来连接cassandra集群的单例类。 首先需要使用哪些设置来连接本地cassandra节点,如果它们已关闭,则仅与远程节点通信。我的池配置选项也就在这里,上面的代码中正在使用该选项? 问题答案: 默认情况下,datastax驱动程序将仅连接到

  • 我的第二个问题是:是否需要?我将来可能会添加更多的节点。