TL; DR:我正在使用Cassandra . 我正在进行测试以确定它是否能够处理负载但是在读取数据时会有很多超时 .
com.datastax.driver.core.exceptions.ReadTimeoutException: Cassandra timeout during read query at consistency LOCAL_ONE (1 responses were required but only 0 replica responded)
我在Amazon AWS上设置了一个Cassandra集群:8个带有2个EBS驱动器的m4.xlarge实例 - 输入“gp2” - 每个100 GB(在一个驱动器上提交日志,在另一个驱动器上提交其余数据) . 这些实例位于VPC中的相同可用区中 . 我使用的是Apache Cassandra 3.7的库存版本,没有对服务器或Cassandra本身进行特定调整 .
我已经加载了10亿条记录 . 他们每个人都有大约30个领域 . 主键由2个分区键和一个聚类列组成 . 我有每个分区键大约10条记录 . 复制因子为3.压缩后,8个节点中的每个节点都存储大约40 GB的数据 .
我的测试包括使用Datastax Cassandra驱动程序使用基本Scala应用程序对随机密钥进行1000次查询 . WHERE
子句包含分区键,我读取所有记录,即 WHERE
子句不包括聚类列 .
当查询是连续的时,所有查询都返回预期结果,平均响应时间为74毫秒 .
当我使用异步查询时,立即进行所有查询并在 Future
上调用 get()
,我在5秒后得到很多超时(25%到75%的查询失败) .
我假设EBS驱动器可能受到限制,我尝试使用不同的集群:i2.xlarge类型的3个节点,数据存储在临时驱动器上 .
请注意,在我的测试期间,压缩已停止完成其工作 . 我没有看到垃圾收集器在查询期间踢了 .
知道为什么查询会产生超时吗?
1 回答
你是否限制了异步查询?您以异步方式向群集发送了多少个选择?