一致性本地仲裁读取查询期间的Cassandra超时(需要2个响应,但仅响应1个副本)

一致性本地仲裁读取查询期间的Cassandra超时(需要2个响应,但仅响应1个副本),cassandra,cassandra-3.0,Cassandra,Cassandra 3.0,我们的一个应用程序偶尔会出现以下错误: Cassandra timeout during read query at consistency LOCAL_QUORUM (2 responses were required but only 1 replica responded) 在一个小时内,我们可能会收到20或30个超过10000个或更多的查询。而查询的重试通常是有效的 这似乎是某种超时。错误出现在应用程序日志中,但在cassandra system.log或debug.log中,我没有看

我们的一个应用程序偶尔会出现以下错误:

Cassandra timeout during read query at consistency LOCAL_QUORUM (2 responses were required but only 1 replica responded)
在一个小时内,我们可能会收到20或30个超过10000个或更多的查询。而查询的重试通常是有效的

这似乎是某种超时。错误出现在应用程序日志中,但在cassandra system.log或debug.log中,我没有看到任何相应的错误或警告,或者任何真正的错误或警告

我在网上做的所有搜索都会导致人们一致地看到这一点,但对我来说,这并不一致。集群本身运行正常,其他查询返回的结果也很好。正在查询的表不大(每台服务器上有几十MB)。查看TableHistoryGrams,我没有看到在任何服务器上对所讨论的表进行过大的读写操作。CPU、内存等都很好

该表的典型组织结构图当前为

Percentile  SSTables     Write Latency      Read Latency    Partition Size        Cell Count
                              (micros)          (micros)           (bytes)
50%             2.00             29.52            152.32              1916                72
75%             3.00             35.43            379.02             24601               770
95%             3.00             51.01            379.02            454826             14237
98%             3.00             61.21            379.02            654949             20501
99%             3.00             73.46            379.02            785939             24601
Min             0.00             14.24            105.78               180                 6
Max             3.00             88.15            379.02           1629722             51012
虽然在这个错误出现后,我还没有收到一封信

运行ApacheCassandra 3.11.3。16节点群集(每个DC中有8个节点)。复制为DC1:3、DC2:3(对于所有用户键空间中的所有表)。驱动程序配置为使用dcawarerroundrobin,所有读写都是本地仲裁。应用程序(和我们所有的应用程序一样)是write-huve。如果有帮助,请配置STDC

我们看到写操作上的超时要少得多,但它们不是零:

com.datastax.driver.core.exceptions.WriteTimeoutException: Cassandra timeout during SIMPLE write query at consistency LOCAL_QUORUM (2 replica were required but only 1 acknowledged the write)
如果这很重要,那么对于这个特定的应用程序,Akka持久性表就是这样

我正在寻找可能的原因建议,因为我还没有找到任何东西(而且我没有太多头发要拔…)

谢谢

Caused by: com.datastax.driver.core.exceptions.ReadTimeoutException: Cassandra timeout during read query at consistency LOCAL_QUORUM (2 responses were required but only 1 replica responded)
at com.datastax.driver.core.Responses$Error$1.decode(Responses.java:91)
at com.datastax.driver.core.Responses$Error$1.decode(Responses.java:66)
at com.datastax.driver.core.Message$ProtocolDecoder.decode(Message.java:297)
at com.datastax.driver.core.Message$ProtocolDecoder.decode(Message.java:268)
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:88)
... 34 common frames omitted

我们有几个应用程序使用这个集群。这不是唯一一个出现错误的应用程序,但我认为通过修复此应用程序,它将修复其他应用程序。

似乎副本加载太多,无法在配置的超时时间内响应。您可以尝试增加Cassandra.yamlw中的值查询和表结构是什么?超时时间有多长?你可以检查的一件事是垃圾收集。您使用CMS还是G1GC?您的日志将显示是否有“停止世界”暂停发生。或者使用一些实用程序来检查GC。如果这是您的问题,您可以更改GC算法或对其进行配置以避免超时。超时将是默认值,因此为2秒。使用G1GC和Oracle JDKa 1.8u172。我确实发现了Cassandra抛出大量错误的问题:org.apache.Cassandra.db.unknownClumnFamilyException:找不到cfId的表。。。架构版本与集群中的版本相同。集群重启没有帮助,修复也没有帮助(对表的修复失败),所以我们最终放弃了表,让应用程序重新创建它。我不得不重新启动集群,然后让模式匹配,但之后该应用程序的问题消失了,错误也消失了。我需要验证这是否“修复”了任何其他应用程序。