在一致性 LOCAL_QUORUM 读取查询期间 Cassandra 超时(需要 2 个响应,但只有 1 个副本响应)

The*_*awk 5 cassandra cassandra-3.0

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

Cassandra timeout during read query at consistency LOCAL_QUORUM (2 responses were required but only 1 replica responded)
Run Code Online (Sandbox Code Playgroud)

在一个小时内,我们可能会收到 20 或 30 个超过 10,000 个或更多的查询。并且重试查询通常有效。

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

我在网上进行的所有搜索都会导致人们一致看到这一点的查询,但对我来说却不一致。集群本身健康,其他查询返回就好。被查询的表并不大(每台服务器上几十 MB)。查看 tablehistorgrams,我没有看到任何服务器上有问题的表的读取或写入过大。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
Run Code Online (Sandbox Code Playgroud)

尽管在出现此错误后我没有立即收到。

运行 Apache Cassandra 3.11.3。16 节点集群(每个 DC 8 个节点)。复制是 DC1:3、DC2:3(对于所有用户键空间中的所有表)。驱动配置为使用DCAwareRoundRobin,所有读写都是LOCAL_QUORUM。应用程序(就像我们所有的应用程序一样)是写的沉重。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)
Run Code Online (Sandbox Code Playgroud)

如果重要的话,这发生在此特定应用程序的 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
Run Code Online (Sandbox Code Playgroud)

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