系统规范与Cassandra配置参数之间的关系

时间:2018-05-08 12:22:23

标签: cassandra datastax cassandra-3.0

Cassandra的配置参数(下面给出的是当前值),Datastax的C ++驱动程序配置参数(下面给出的是当前值)和节点的硬件规格(处理器数量,RAM,磁盘数量等)之间是否存在关系? )

Cassandra的配置参数(在YAML中)

concurrent_reads set as 16
concurrent_writes set as 256
native_transport_max_threads set as 256
native_transport_max_frame_size_in_mb set as 512

Datastax的C ++驱动程序配置参数

cass_cluster_set_num_threads_io set as 10
cass_cluster_set_core_connections_per_host set as 1
cass_cluster_set_max_connections_per_host set as 20
cass_cluster_set_max_requests_per_flush set as 10000

节点的规格

No. of processors: 32
RAM: >150 GB
No. of hard disks: 1

Cassandra's Version: 3.11.2 Datastax C++ driver version: 2.7 RHEL version: 6.5

我有一个包含2个节点的集群,而且我的吞吐量一直很低(12000 ops /秒)。 1 operation = read + write(我不能使用行缓存)。是否有任何参数应该设置得更高/更低(考虑节点的规格)?

  

请注意我的读写应用程序是多线程的(10   线程)。另外,我正在进行异步读取+异步写入(使用未来)。   复制因子为2,两个节点都处于相同的DC,一致性   读写的级别也是2。

1 个答案:

答案 0 :(得分:2)

Cassandra中的一些配置属性是根据可用的CPU内核和驱动器计算的。

concurrent_reads = 16 * (number of drives)
concurrent_writes = 8 * (CPU cores)

看起来你已经这样做了,虽然我会质疑你的32个CPU是否都是物理内核或超线程。

  

我有一个包含2个节点的集群,而且我的吞吐量一直很低(12000 ops /秒)。

只是我的观点,但认为12k操作/秒非常好。实际上真的对双节点集群有利。卡桑德拉水平地伸展,并且线性地伸缩。所以这里的解决方案很简单......添加更多节点。

您每秒的目标操作是什么?现在,您证明每个节点可以获得6k ops /秒。这意味着,如果您添加另一个,群集应该支持18K /秒。如果你去六个节点,你应该能够支持36k /秒。基本上,找出你的目标,并做数学。

您可以考虑的一件事是尝试ScyllaDB。 Scylla是Cassandra的直接替代品,它可以满足非常高的吞吐量要求。缺点是,我认为Scylla只是Cassandra 2.1或2.2兼容的ATM。但根据你想要做的事情,这可能值得一试。