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)
我在亚马逊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毫秒。
当我使用异步查询时,立即进行所有查询并在get()
上调用Future
,5秒后会有很多超时(25%到75%的查询失败)
我认为EBS驱动器可能受到限制,我尝试使用不同的群集:i2.xlarge类型的3个节点,数据存储在临时驱动器上。
请注意,在我的测试中,压缩已停止完成其工作。我没有看到垃圾收集器在查询期间开始使用。
知道为什么查询会产生超时吗?
答案 0 :(得分:2)
当我使用异步查询时,立即进行所有查询并在Futures上调用get(),5秒后会有很多超时(25%到75%的查询失败)。
您是否限制了异步查询?您以异步方式向群集发送了多少个选择?