您正在使用哪个 Cassandra 版本。
我已经从 Cassandra 2.x 和 Cassandra 3.x 版本对其进行了测试。它工作正常。
root@cqlsh:test_db> SELECT token(name) from test_temp ;
system.token(名称)
---------------------
-907920378987128470
nodetool getendpoints test_db test_temp -907920378987128470;
192.168.8.52
更新答案:有问题
当分区键的第一部分是 int 时会产生问题。
创建表 test6 (
年龄 int 主键,
名称文本
);
bin/nodetool getendpoints 测试 test6 -7072928299163215694
error: For input string: "-7072928299163215694"java.lang.NumberFormatException: For input string:"-
7072928299163215694"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:583)
at java.lang.Integer.parseInt(Integer.java:615)
但适用于以下输入
bin/nodetool getendpoints 测试 test6 -7072
127.0.0.1
来自 DataStax 文档:
提供拥有分区键的端点。分区器返回密钥的令牌。无论该令牌的已识别节点上是否存在数据,Cassandra 都会返回一个端点。** key 是要获取的端点的分区键。
nodetool getendpoints 实际上将分区键的值作为输入。在这种情况下,“-7072928299163215694”将其解析为整数,因此最终抛出异常。它适用于 long 或 String (它采用 '-7072928299163215694' 值作为字符串),因为它已将此作为键的值而不是实际令牌。它不解析令牌。所以提供令牌作为输入是行不通的。
getendpoints 从密钥的值生成令牌,并为您提供密钥所在的端点(节点)。
请查看此链接:
Cassandra 将数据存储在哪个节点上?
为此提供了一个补丁:
https://issues.apache.org/jira/browse/CASSANDRA-4551
希望这可以帮助。