我有java应用程序,它使用datastax驱动器与cassandra进行通信。我要求只在没有重载的情况下查询cassandra。 在应用程序级别(非手动)我怎么知道cassandra是否超载? datastax是否提供任何此类API?我正在寻找像boolean isCassOverloded()这样的方法。在这方面帮助我。
谢谢答案..只是想更具体一点,我更感兴趣的是检查'现场大小'和'密钥数'一个列族。我知道nodetool --host cfstats给出了两个值,但在java中使用datastax我怎么能得到两者?如果datastax没有提供这样的api,那么cassandra会暴露任何其他api来提供这些信息吗?
答案 0 :(得分:1)
在应用程序级别(非手动)我怎么知道cassandra是否超载? datastax是否提供任何此类API?我正在寻找像boolean isCassOverloded()
这样的方法
简单的回答,这样的神奇API不存在。在驱动程序级别提供此类API需要:
第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符合我的应用要求。