添加节点时,为什么我的cassandra吞吐量没有提高?

Jul*_*cia 3 cassandra

这是一个新手问题.我曾尝试过做家庭作业,但我一直在努力学习cassandra如何像广告一样线性扩展.当我针对单个cassandra节点运行时,我得到合理的插入率.以下是一些相关的信息:

  • CentOS 6.5
  • java 1.7.0_71
  • cassandra 2.1.4二进制下载
  • 不同驱动器上的数据和提交日志
  • compaction_throughput_mb_per_sec:0
  • 10,000,000个插页
  • 插入率:~110K插入/秒
  • 还没有实现这些设置,因为我没有兴趣让事情变得像观察线性缩放一样快速.

我的键空间定义是这样的:

create keyspace nms WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : 1 };
use nms;
CREATE TABLE RN(tableId int, sampleTime timestamp, sampleValue bigint, sampleStdev bigint, sampleRate bigint, tz_offset int,
       PRIMARY KEY (tableId, sampleTime));
Run Code Online (Sandbox Code Playgroud)

我的相关java代码看起来像这样(粗略地):

cluster = Cluster.builder().addContactPoint("138.42.229.240")
                .withQueryOptions(new QueryOptions().setConsistencyLevel(ConsistencyLevel.ANY))
                .withRetryPolicy(DefaultRetryPolicy.INSTANCE)
                .withLoadBalancingPolicy(new TokenAwarePolicy(new RoundRobinPolicy()))
                .build();
session = cluster.connect("nms");
batch = new BatchStatement();
statement = session.prepare("INSERT INTO RN" +
            "(tableId, sampleTime, sampleValue, sampleStdev, sampleRate, tz_offset)" +
            "VALUES (?, ?, ?, ?, ?, ?);");
Run Code Online (Sandbox Code Playgroud)

我插入32个tableIds(分区键),每个"拥有"一个线程,以及唯一的sampleTimes.其他数据是填充垃圾.

我发现每个批次的10个插入点和10个executeAsync()调用组的最佳位置.

到现在为止还挺好.现在,添加了4个节点,在SSD SAN上运行硬件和3个虚拟机(我不知道).我使用了与上面描述的每个节点类似的配置,然后运行我的简单测试,期待一些改进.插入率没有变化.我无法解释.我本以期待一些改进.此外,2,3,4和5节点的速率基本保持不变.我意识到奇数可能毫无意义,但我绝望了.

然后,我尝试使用复制因子为零设置密钥空间.我的数据速率降至1K插入/秒.我无法解释这一点.我必须遗漏一些非常明显的东西,但我看不到它.

Chr*_*ink 7

也许插入客户端应用程序是最大的,而不是群集?可以尝试使用另一台机器并在该机器上运行java代码,看看两个客户端的吞吐量是否减半或相同.