Cassandra 卡桑德拉rpc_超时
我用的是卡桑德拉1.2.11。我创建了以下列族:Cassandra 卡桑德拉rpc_超时,cassandra,Cassandra,我用的是卡桑德拉1.2.11。我创建了以下列族: CREATE TABLE subscribers_all ( subscriber text, status int, package text, SW_ON timestamp, S_NUMBER text, USER_NAME text, updated_date timestamp, PRIMARY KEY (subscriber) ); 我创建了一个Java应用程序来删除更新日期早于给定时间戳的所有条目。我在while循环中使用了以下s
CREATE TABLE subscribers_all (
subscriber text,
status int,
package text,
SW_ON timestamp,
S_NUMBER text,
USER_NAME text,
updated_date timestamp,
PRIMARY KEY (subscriber)
);
我创建了一个Java应用程序来删除更新日期早于给定时间戳的所有条目。我在while循环中使用了以下select语句:
select * from subscribers_all where token(subscriber) > token(?) limit 100;
我开始了这个项目。它工作得很好。然后我意识到我给了一个错误的时间戳,所以我终止了程序。我没有连接任何关闭挂钩,因此群集没有正确关闭。
我用正确的时间戳再次启动了程序。Cassandra驱动程序抛出以下错误(我尝试了几次):
com.datastax.driver.core.exceptions.ReadTimeoutException:consistency ONE读取查询期间的Cassandra超时(需要1个响应,但仅响应0个副本)
因此,我决定在cqlsh中测试select。即使是以下简单选择也不起作用:
select subscriber from subscribers_all limit 1;
它总是抛出以下错误:
请求未在rpc_超时内完成
当我在select中放入where子句时,效果很好
select * from subscribers_all where subscriber = 'xyz';
我得到了预期的结果。
我尝试重新启动整个cassandra集群。这没用
在日志文件中,我只能看到一个异常,我认为这与我终止应用程序的时间对应:
错误[本机传输请求:973721]2013-12-12 15:08:29699 ErrorMessage.java(第210行)请求期间出现意外异常
java.io.IOException:对等方重置连接
对于我的cqlsh选择或尝试重新启动应用程序的时间,没有其他异常。
“nodetool tpstats”显示我没有丢弃、阻止或挂起任何消息
有人认为这可能是“由于节点之间的时间同步”。我已验证,服务器已同步
我启用了跟踪,并再次执行了有效和无效的选择。
下面是ok select的跟踪显示(希望我可以粘贴url)
以下是带有“LIMIT 1”的查询的跟踪显示内容的一小部分:
我几乎可以肯定这是一个bug,但是有什么解决方案吗?
我拒绝删除列族并重新创建它:)
在上线时,这不是一个可行的解决方案。在查询Cassandra时,如果垃圾收集过程持续很长时间,请检查您的GC检查器Cassandra不允许您执行任何其他操作,直到垃圾收集过程结束,因此您可能会遇到此异常
com.datastax.driver.core.exceptions.ReadTimeoutException: Cassandra timeout during read
query at consistency ONE (1 responses were required but only 0 replica responded).
如果这是问题所在,您必须调整垃圾收集过程。通过
要可视化GC操作、世代扫描和内存图,请打开JDK附带的JVisualVM工具并安装VisualGC插件。签出。跟踪在有效的查询上显示了什么
select*from subscribers\u all where subscriber='xyz'代码>我已经更新了我的问题。不幸的是,我们在这个问题之后停止使用Cassandra,所以我无法验证这是否是原因。但是,我不认为是这样,因为如果GC出现问题,我希望所有查询都会得到相同的结果(超时)。相反,这只是在我没有放入WHERE子句时发生的。希望遇到这个问题的其他人会进一步评论,因为我已经没有安装Cassandra了。我也有同样的问题,我发现这与在我的表上启用Solr有关。事实证明,我试图在非索引字段上使用WHERE
子句,但由于某种原因,我没有得到通知。我在Solr日志中找到了这方面的痕迹。创建丢失的索引后,问题消失了。当由于许多墓碑(删除)而发生错误时,这里有有用的信息。建议减少表格的gc_grace_秒数。