告诉cassandra集群的API是否过载

时间:2016-01-27 18:52:22

标签: java cassandra datastax

我有java应用程序,它使用datastax驱动器与cassandra进行通信。我要求只在没有重载的情况下查询cassandra。 在应用程序级别(非手动)我怎么知道cassandra是否超载? datastax是否提供任何此类API?我正在寻找像boolean isCassOverloded()这样的方法。在这方面帮助我。

谢谢答案..只是想更具体一点,我更感兴趣的是检查'现场大小'和'密钥数'一个列族。我知道nodetool --host cfstats给出了两个值,但在java中使用datastax我怎么能得到两者?如果datastax没有提供这样的api,那么cassandra会暴露任何其他api来提供这些信息吗?

5 个答案:

答案 0 :(得分:1)

  

在应用程序级别(非手动)我怎么知道cassandra是否超载? datastax是否提供任何此类API?我正在寻找像boolean isCassOverloded()

这样的方法

简单的回答,这样的神奇API不存在。在驱动程序级别提供此类API需要:

  1. 重载节点相比,能够定义什么是健康节点
  2. 能够实时收集群集中任何节点的健康状况
  3. 能够将此运行状况传播到群集中的所有节点,而不会破坏本地网络
  4. 第1点很难实现,因为节点运行状况可能取决于各种硬件因素(CPU使用率,磁盘I / O ......),获取这些信息需要在所有这些机器上安装系统代理

    第2点和第3点已经由Gossip协议实现,但是Gossip只告诉你节点是UP / DOWN及其怀疑程度,而不是节点是否过载或空闲

    要通知任何节点(UP或DOWN)的状态,您可以在驱动程序上注册主机状态listerner:http://docs.datastax.com/en/drivers/java/2.1/com/datastax/driver/core/Host.StateListener.html

答案 1 :(得分:0)

重载的cassandra是什么意思?

这很模糊。节点cpu使用或数据库连接使用,或每个连接上持续的查询数。

无论如何,这是你需要做的事情

https://datastax.github.io/java-driver/2.0.10/features/pooling/#monitoring-and-tuning-the-pool

使用提供的代码监控连接状态,并据此决定是否要解除查询。

答案 2 :(得分:0)

Cassandra通过jmx url公开MBeans对象。您可以按照here所述使用JConsole来查看公开的指标。看看org.apache.cassandra.metrics

您的Java客户端应用程序可以通过jmx连接连接到群集以收集这些信息。然后,您必须选择启发式方法来确定您的群集是否过载。如何使用ClientRequest.Read.Latency如下:

Boolean cluster_overloaded = read_latency > read_request_timeout / 5 

read_request_timeout是一个常量值:您在cassandra.yaml文件中设置的值。

答案 3 :(得分:0)

  

如果datastax没有提供这样的api,那么cassandra会暴露任何其他api来提供这些信息吗?

您可以通过点击JMX API本身来访问这些信息。 Cassandra服务器通过JMX接口公开所有这些指标。

您需要的只是获取这些信息的工具。

看看Jolokia:https://jolokia.org/

答案 4 :(得分:0)

所以这就是我最终实现的方式: 我使用Java.management api获得以下度量的“Count”属性。 “org.apache.cassandra.metrics:类型=的ColumnFamily,密钥空间= mykeyspace,范围= myCF,名字= LiveDiskSpaceUsed” 并在服务层比较,如果它大于例如350 MB ..然后假设cassandra超载。 注意:abovelogic符合我的应用要求。