【问题标题】:Cassandra frequent read time out errorsCassandra 频繁读取超时错误
【发布时间】:2013-07-09 19:05:05
【问题描述】:

我是 cassandra 的新手,只知道它的基础知识。我在 cassandra 中经常遇到异常。我正在使用节俭的 API 单节点 cassandra。主要是我在写,但那些涉及现有的检查。

我尝试将read_request_timeout_in_ms 从 10 秒增加到一个非常大的数字:9480 秒。然后我也遇到了超时错误。我不知道这背后的确切原因。

这里是堆栈跟踪:

org.apache.thrift.transport.TTransportException: java.net.SocketTimeoutException: Read timed out    
    at org.apache.thrift.transport.TIOStreamTransport.read(TIOStreamTransport.java:129)
    at org.apache.thrift.transport.TTransport.readAll(TTransport.java:84)
    at org.apache.thrift.transport.TFastFramedTransport.readFrame(TFastFramedTransport.java:140)
    at org.apache.thrift.transport.TFastFramedTransport.read(TFastFramedTransport.java:134)
    at org.apache.thrift.transport.TTransport.readAll(TTransport.java:84)
    at org.apache.thrift.protocol.TBinaryProtocol.readAll(TBinaryProtocol.java:378)
    at org.apache.thrift.protocol.TBinaryProtocol.readI32(TBinaryProtocol.java:297)
    at org.apache.thrift.protocol.TBinaryProtocol.readMessageBegin(TBinaryProtocol.java:204)
    at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:69)
    at org.apache.cassandra.thrift.Cassandra$Client.recv_set_keyspace(Cassandra.java:531)
    at org.apache.cassandra.thrift.Cassandra$Client.set_keyspace(Cassandra.java:518)
    at  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:619)
Caused by: java.net.SocketTimeoutException: Read timed out  

    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:129)
    at org.apache.thrift.transport.TIOStreamTransport.read(TIOStreamTransport.java:127)
    ... 25 more

【问题讨论】:

  • 你应该重新格式化你的转储。格式良好且可读性强时,您的手势更有可能得到回答
  • @user2572801 频繁是指像 1/5 还是指每个请求?
  • 在多次插入后要求不高

标签: exception timeout cassandra


【解决方案1】:

这里发生的情况是,您告诉 Cassandra 让您的查询运行很长时间,但您没有告诉您的 Thrift 客户端等待 Cassandra 的回复那么久。

但实际上,10 秒已经足够了。不要改变那个。相反,请找出为什么您的查询需要更长的跟踪时间:http://www.datastax.com/dev/blog/tracing-in-cassandra-1-2

此外,您应该在此处查看数据建模资源:https://wiki.apache.org/cassandra/DataModel。写前存在检查是一种设计味道。

【讨论】:

  • 是的,我需要尝试一些监控工具..会试一试..因为我是新手一个愚蠢的问题:我有一个表 rel 存储 3 个具有 3 个 id 的列.....rel表(rowkey,startId,relId,endId)..所有三个都被索引,因为查找可以是它们中的任何一个..现在rowkey是UUID......所以在任何插入之前我必须做现有的检查..我可以避免这个通过将 rowkey 设计为这 3 个 id 的哈希值,这样我就不必进行现有检查...这是正确的设计...
  • 您能否详细说明 Existance-check-before-write 是一种设计气味或链接一些与此相关的资源?
猜你喜欢
  • 2013-08-08
  • 2021-01-12
  • 1970-01-01
  • 2014-08-06
  • 1970-01-01
  • 1970-01-01
  • 2016-04-20
  • 2019-08-14
  • 1970-01-01
相关资源
最近更新 更多