【问题标题】:Cassandra inserts throttled on clusterCassandra 插入在集群上受到限制
【发布时间】:2013-03-25 17:03:30
【问题描述】:

我在使用 Cassandra 时遇到了一个奇怪的问题。我的理解是 Cassandra 对于插入是可扩展的。这意味着如果我使用 2 个服务器的集群获得 1500 次写入/秒,我可以将其增加到 4 台服务器并接近 1500 次写入/秒。我知道 writes/s 可能不会随着集群中的节点数量线性增加,但我目前看到添加更多节点时 writes/s 数量没有增加。

我目前的设置是这样的:

使用 Pycassa 进行批量插入,批量大小为 20 行。 复制因子 2 持久写入

有些 ColumnFamilies 有普通的列,有些有高达几十万列的宽列。具有宽列的 ColumnFamilies 的插入是分批插入的,而不是 100,000 列的 20 行。

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

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

【问题讨论】:

    标签: cassandra pycassa


    【解决方案1】:

    听起来您的客户没有使 Cassandra 饱和。如果 Cassandra 不是 CPU、i/o 或网络绑定,这就是您的问题。

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

    TLDR 不断添加客户端计算机,直到数量停止上升。

    (我还建议使用 OpsCenter 之类的工具进行监控,这会突出显示使用 ByteOrderedPartitioner 或未在集群中正确分散请求负载等问题。)

    【讨论】:

    • 对,我使用 2 个客户端获得与 10 个客户端相同的性能。但你是对的,Cassandra 服务器没有 I/O 绑定插入。它们的平均负载约为 1-2,集群的 IOPS 约为 500,这远低于驱动器的能力。我有大约 500 个 csv 文件要导入到 cassandra,每个客户端一次运行 8 个进程,加载不同的 csv 文件。还是没有运气...
    • 还要确保您的客户端将插入分布在集群周围,而不是全部插入到同一个节点。
    猜你喜欢
    • 1970-01-01
    • 2014-06-24
    • 2015-03-10
    • 1970-01-01
    • 2016-04-16
    • 2021-05-21
    • 2019-04-17
    • 1970-01-01
    • 2021-12-29
    相关资源
    最近更新 更多