2013-03-25 40 views
1

我遇到了Cassandra的一个奇怪问题。我的理解是Cassandra可以插入缩放。这意味着如果我得到1500个写入/秒的2台服务器集群,我可以将其增加到4台服务器,并且接近1500次写入/秒。据我所知,写入数量可能不会随着群集中节点数量的增加而线性增加,但当添加更多节点时,我目前看不到写入次数的增加。Cassandra在群集上插入扼杀

我目前的设置是这样的:

批量插入使用Pycassa的20行的批量大小。 复制因子2 耐用写入

某些ColumnFamilies有正常的列,有些列的宽度高达数十万列。具有宽列的ColumnFamilies的插入插入多个批次,而不是20个包含100,000个列的行。

cassandra集群是EC2中托管的2节点集群,使用带有SSD驱动器的m1.xlarge(无raid),并且提交日志与sstables位于同一驱动器中。

我试过将集群扩展到10个以上的节点,我获得了与2个节点相同的性能。我也尝试增加导入数据的实例数量,性能是相同的,只是每个写入操作的延迟会高得多。但无论我做什么,我都无法使写入速度超过1500/s。

回答

3

听起来像你的客户不饱和卡桑德拉。如果Cassandra不是CPU,I/O或网络绑定,这是您的问题。

经验法则是,2个Cassandra服务器需要大约1个客户端机器以一个副本将其饱和。 (所以,大约为1:4)。如果你不使用像Java那样的“快速”语言,将客户数量乘以5-10;对于Python,由于GIL,您还需要花费一些努力在每台计算机内的多个进程之间进行并行化。

TLDR不断添加客户机,直到数字停止上升。

(我也建议有类似的OpsCenter,这将使用ByteOrderedPartitioner突出的如问题,还是整个集群无法正常传播请求负载监控。)

+0

,我收到了相同的性能与2个客户端作为10.但你是对的Cassandra服务器不是I/O绑定插入。它们的负载平均值在1-2左右,集群的IOPS大约在500以下,这是驱动器能够承受的。我有大约500个csv文件,我正在导入cassandra,每个客户端一次运行8个进程,每次加载一个不同的csv文件。仍然没有运气...... – bwight 2013-03-25 17:55:57

+0

还要确保你的客户端正在集群周围分发插入内容,而不是所有插入到同一个节点。 – Zanson 2013-03-26 23:17:19