【问题标题】:Does metadata.getTokenRanges() return all token range across all nodes in cassandra?metadata.getTokenRanges() 是否返回 cassandra 中所有节点的所有令牌范围?
【发布时间】:2023-03-19 01:04:01
【问题描述】:

我通过了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() 创建会话。

我的问题是:

  1. metadata.getTokenRanges() 是否提供所有主机的所有令牌范围?还是我需要获取所有主机并获取每个主机的令牌范围?
  2. 跨所有节点获取令牌范围是否不同于给定keyspace 的令牌范围?

Cassandra 版本:3.*

【问题讨论】:

    标签: cassandra datastax-enterprise cassandra-3.0


    【解决方案1】:

    每个主机都通过 getTokens() 公开其主令牌。

    Metadata.getTokenRanges() 返回定义环中数据分布的令牌范围。

    您还可以选择使用 Metadata.getTokenRanges(String keyspace, Host host),它返回在给定主机上为特定键空间复制的令牌范围。

    检查以下链接:

    this example 可能会有所帮助。

    【讨论】:

      猜你喜欢
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      • 2016-04-18
      • 2020-04-24
      • 1970-01-01
      • 2014-01-03
      • 2022-09-29
      • 2012-06-14
      相关资源
      最近更新 更多