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。
答案 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。但根据你想要做的事情,这可能值得一试。