【问题标题】:Can I force a Cassandra table flush from the C/C++ driver like nodetool does?我可以像 nodetool 那样从 C/C++ 驱动程序中强制刷新 Cassandra 表吗?
【发布时间】:2016-08-12 07:45:23
【问题描述】:

我想知道是否可以从 Cassandra 的 C/C++ 驱动程序复制 nodetool 实用程序中的 forceKeyspaceFlush() 函数。

nodetool 函数如下所示:

public class Flush extends NodeToolCmd
{
    @Arguments(usage = "[<keyspace> <tables>...]", description = "The keyspace followed by one or many tables")
    private List<String> args = new ArrayList<>();

    @Override
    public void execute(NodeProbe probe)
    {
        List<String> keyspaces = parseOptionalKeyspace(args, probe);
        String[] tableNames = parseOptionalTables(args);

        for (String keyspace : keyspaces)
        {
            try
            {
                probe.forceKeyspaceFlush(keyspace, tableNames);
            } catch (Exception e)
            {
                throw new RuntimeException("Error occurred during flushing", e);
            }
        }
    }
}

我想在我的 C++ 软件中复制的是这一行:

probe.forceKeyspaceFlush(keyspace, tableNames);

有可能吗?

【问题讨论】:

    标签: c++ cassandra driver cassandra-3.0


    【解决方案1】:

    这是一个不寻常的请求,主要是因为 Cassandra 设计为分布式,因此如果您正在执行查询,则需要在每个(可能很多)副本上执行阻塞刷新。我不会让你相信你真的不需要这个,我会尝试回答你的问题 - 但是,你可能并不真的需要这个。

    Nodetool 正在使用 JMX 接口(在 tcp/7199 上)强制刷新 - 您的 c/c++ 驱动程序通过本机协议(在 tcp/9042 上)进行通信。目前无法通过the native protocol进行刷新。

    解决这个限制,您需要执行一个支持 jmx 的命令行实用程序(nodetool 或其他),在 c++ 中实现一个 JMX 客户端(已经完成),或者扩展本机协议。这些都不是特别令人愉快的选择,但我想执行 jmx CLI 实用程序比其他两个要容易得多。

    【讨论】:

    • 嗯...这与另一个问题有关:stackoverflow.com/questions/36689227/… - 看起来如果没有清晰的冲洗,我将无法不使 Cassandra 崩溃。我知道如果我有一个 20 节点的集群,我会很好,因为那不是那么多数据。然而,在单节点测试中,不幸的是,节点很快就被淹没了。
    猜你喜欢
    • 2010-11-17
    • 2012-02-25
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 2017-08-04
    • 2014-03-27
    相关资源
    最近更新 更多