我经历了Is there a way to see token ranges for each node in cassandra which uses vnodes?。在此实现中,我们获取所有主机并获取这些单个主机中的令牌范围,以获取所有节点上的所有令牌范围。
但是,就我而言,我正在使用以下代码:
public static synchronized List<Object[]> getTokenRangesAcrossNodes(
final String node, final Integer port, final String userName, final String password) {
if (cluster == null) {
connect(node, port, userName, password);
}
Metadata metadata = cluster.getMetadata();
return unwrapTokenRanges(new ArrayList<>(metadata.getTokenRanges()));
}
在上面的connect()
函数node
中,所有逗号分隔的cassandra主机字符串都有,我使用Cluster.builder()。addContactPoints()创建会话。
我的问题是:
metadata.getTokenRanges()
是否提供所有主机上的所有令牌范围?还是我需要获取所有主机并获取每个主机的令牌范围?keyspace
的令牌范围不同?Cassandra版本:3。*
答案 0 :(得分:0)
每个主机都通过getTokens()公开其主要令牌。
Metadata.getTokenRanges()返回定义环中数据分布的令牌范围。
您还可以选择使用Metadata.getTokenRanges(String keyspace,Host host),它返回在给定主机上为特定键空间复制的令牌范围。
检查以下链接:
this example可能会有所帮助。