间歇性Cassandra读取失败,可能是由于超时

间歇性Cassandra读取失败,可能是由于超时,cassandra,Cassandra,我在读卡桑德拉的书时遇到了间歇性的问题。使用cqlsh和java驱动程序都会出现问题 例如,在cqlsh中,命令 从表中选择不同的计数(partitionKeyColumnName) 通常按预期工作,但偶尔会抛出 Traceback (most recent call last): File "/home/moi/h/sw_projects/senta12/apache-cassandra-3.5/bin/cqlsh.py", line 1317, in perform_simple_state

我在读卡桑德拉的书时遇到了间歇性的问题。使用cqlsh和java驱动程序都会出现问题

例如,在cqlsh中,命令

从表中选择不同的计数(partitionKeyColumnName)

通常按预期工作,但偶尔会抛出

Traceback (most recent call last):
File "/home/moi/h/sw_projects/senta12/apache-cassandra-3.5/bin/cqlsh.py", line 1317, in perform_simple_statement
result = future.result()
File "/home/user/apache_dir/apache-cassandra-3.5/bin/../lib/cassandra-driver-internal-only-3.0.0-6af642d.zip/cassandra-driver-3.0.0-6af642d/cassandra/cluster.py", line 3122, in result raise self._final_exception
ReadFailure: code=1300 [Replica(s) failed to execute read] message="Operation failed - received 0 responses and 1 failures" info={'failures': 1, 'received_responses': 0, 'required_responses': 1, 'consistency': 'ONE'}
如果我使用java驱动程序发出相同的命令,结果通常是正确的,但偶尔驱动程序会抛出错误

Exception in thread "main" com.datastax.driver.core.exceptions.ReadFailureException: Cassandra failure during read query at consistency LOCAL_ONE (1 responses were required but only 0 replica responded, 1 failed)
at com.datastax.driver.core.exceptions.ReadFailureException.copy(ReadFailureException.java:85)
at com.datastax.driver.core.exceptions.ReadFailureException.copy(ReadFailureException.java:27)
at com.datastax.driver.core.DriverThrowables.propagateCause(DriverThrowables.java:37)
at com.datastax.driver.core.DefaultResultSetFuture.getUninterruptibly(DefaultResultSetFuture.java:245)
at com.datastax.driver.core.AbstractSession.execute(AbstractSession.java:63)
at com.datastax.driver.core.AbstractSession.execute(AbstractSession.java:39)
...
Caused by: com.datastax.driver.core.exceptions.ReadFailureException: Cassandra failure during read query at consistency LOCAL_ONE (1 responses were required but only 0 replica responded, 1 failed)
at com.datastax.driver.core.Responses$Error$1.decode(Responses.java:76)
at com.datastax.driver.core.Responses$Error$1.decode(Responses.java:37)
at com.datastax.driver.core.Message$ProtocolDecoder.decode(Message.java:266)
at com.datastax.driver.core.Message$ProtocolDecoder.decode(Message.java:246)
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89)
配置(这基本上是一个测试系统):

  • 在单个节点上运行的apache-cassandra-3.5的完全普通安装
  • 未更改任何参数
  • cassandra-java-driver-3.0.0
  • 键空间的复制因子为1
  • 客户端(cqlsh和java驱动程序)与Cassandra服务器位于同一物理系统上(即所有访问都是本地的)
  • 一次只有一个客户端访问Cassandra
被查询的表大约有1.22亿行分布在730个分区键值上(相当均匀)

这个问题的前后矛盾令人不安,我根本不知道如何解释它。也许服务器中有什么东西超时了,但如果是这样的话,我希望出现更一致的故障,特别是因为系统上的负载总是相同的


如果您对此有任何想法,我将不胜感激。

我将看看垃圾收集。GC发生时可能会发生超时。这将说明它是一个间歇性问题。在system.log中查找GCInspector.java事件,查看它们是否与超时同时发生。似乎只有在首次启动Cassandra时才会出现问题。在它运行了一段“短时间”——可能是五分钟——之后,错误就不再发生了。为什么会这样还不清楚。对于较小的表,它永远不会发生。也许cassandra仍在重播commitlogs?我发现cassandra通常需要2-3分钟才能完全初始化。听起来很可能。有没有办法确定初始化何时完成?谢谢。请在system.log文件
INFO[main]2016-07-07 13:10:16537 Server.java:182-开始在/0.0.0:9042上侦听CQL客户端…
(可能会看到您的本地IP地址)我将查看垃圾收集。GC发生时可能会发生超时。这将说明它是一个间歇性问题。在system.log中查找GCInspector.java事件,查看它们是否与超时同时发生。似乎只有在首次启动Cassandra时才会出现问题。在它运行了一段“短时间”——可能是五分钟——之后,错误就不再发生了。为什么会这样还不清楚。对于较小的表,它永远不会发生。也许cassandra仍在重播commitlogs?我发现cassandra通常需要2-3分钟才能完全初始化。听起来很可能。有没有办法确定初始化何时完成?谢谢。在system.log文件
INFO[main]2016-07-07 13:10:16537 Server.java:182-开始在/0.0.0.0:9042上侦听CQL客户端…
(可能会看到您的本地IP地址)