【发布时间】:2019-12-06 22:32:11
【问题描述】:
是否有nodetool 的 API?特别是nodetool tablestats
我看到有https://github.com/scylladb/scylla/tree/master/api/api-doc。这是寻找 API 的正确位置吗?
【问题讨论】:
标签: scylla
是否有nodetool 的 API?特别是nodetool tablestats
我看到有https://github.com/scylladb/scylla/tree/master/api/api-doc。这是寻找 API 的正确位置吗?
【问题讨论】:
标签: scylla
Scylla 服务器确实有一个 REST API,它的文档位于您指向的 URL。启动 Scylla 服务器时也可以找到 Swagger UI:https://docs.scylladb.com/operating-scylla/rest/。
但是,请注意 nodetool 不直接使用 API。相反,它与 Scylla JMX 代理通信,这是一个实现与 Cassandra 兼容的 JMX API 的 Java 进程。您仍然可以直接使用 REST API,但您必须自己弄清楚 JMX 操作和 REST API 之间的映射关系。
对于像nodetool tablestats 这样的东西,第一步是检查 nodetool 使用什么 JMX API:
该命令委托给 TableStatsHolder 类:
它使用 ColumnFamilyStoreMBean JMX API 来查询表统计信息。
在scylla-jmx项目中通过找到ColumnFamilyStore类(不带MBean后缀)可以找到JMX API的实现:
从该类中,您可以看到,例如,ColumnFamilyStore.getSSTableCountPerLevel() 方法委托给 column_family/sstables/per_level/<table name> REST API URL。
【讨论】:
嗯,FWIW 我在这里通过直接访问 API 重新实现了 nodetool: https://github.com/scylladb/scylla-tools-java/pull/121
它可以工作,但在代码方面我会进行一些重构以避免重复,否则它完全可以通过 REST API 使用 nodetool(跳过 JMX 以获取“tablestats”)
【讨论】: