Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra 卡桑德拉rpc_超时_Cassandra - Fatal编程技术网

Cassandra 卡桑德拉rpc_超时

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

我用的是卡桑德拉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循环中使用了以下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_秒数。