2013-12-13 73 views
2

我正在使用Cassandra 1.2.11。我創建了以下列族:Cassandra rpc_timeout

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應用程序來刪除比一個給定的日期和時間舊的updated_date所有條目。我在while循環中使用了以下select語句:

select * from subscribers_all where token(subscriber) > token(?) limit 100; 

我開始了這個程序。它運作良好。然後我意識到我給了一個錯誤的時間戳,所以我殺了程序。我沒有附加任何關機掛鉤,因此羣集沒有正常關閉。 我再次啓動了程序,並帶有正確的時間戳。卡桑德拉司機拋出下面的錯誤(我試了好幾次):

com.datastax.driver.core.exceptions.ReadTimeoutException: Cassandra timeout during read query at consistency ONE (1 responses were required but only 0 replica responded)

所以,我決定測試選擇在cqlsh。即使是下面這個簡單的選擇是不工作:

select subscriber from subscribers_all limit 1; 

它總是拋出這個錯誤:

Request did not complete within rpc_timeout.

當我把在where子句中我選擇,它工作正常。

select * from subscribers_all where subscriber = 'xyz'; 

我得到了預期的結果。 我試過重新啓動整個cassandra集羣。這沒有幫助。

在日誌文件中,我只看到一個例外,我想對應的時間,當我殺了我的應用程序:

ERROR [Native-Transport-Requests:973721] 2013-12-12 15:08:29,699 ErrorMessage.java (line 210) Unexpected exception during request java.io.IOException: Connection reset by peer

沒有其他異常爲我cqlsh選擇或我試着重新啓動時間我的應用程序。 'nodetool tpstats'顯示我沒有丟棄,也沒有阻止或掛起的消息。

有人提出它可能是'由於節點之間的時間同步'。我驗證了服務器已同步。

我啓用了跟蹤功能,並且我再次執行了選擇和沒有選擇的選擇。 以下是跟蹤顯示的確定選擇(希望我可以粘貼網址)。

http://pastebin.com/7D6gYRms

這裏的一小部分是什麼軌跡顯示了與「LIMIT 1」查詢:

http://pastebin.com/50ksph3k

我幾乎可以肯定,這是一個錯誤,但沒有任何解決它? 我拒絕放棄列家庭並重新創建它:) 這不是一個可行的解決方案,當上線。

+0

什麼是追蹤顯示在查詢中的作品select * from subscribers_all where subscriber ='xyz';' –

+0

我已經更新了我的問題。 – Anakin001

回答

3

檢查您的GC檢查器,當您查詢Cassandra時,如果垃圾收集過程持續很長時間Cassandra不會允許您執行任何其他操作,直到垃圾收集過程結束,因此您可能會得到此異常。

com.datastax.driver.core.exceptions.ReadTimeoutException: Cassandra timeout during read 
query at consistency ONE (1 responses were required but only 0 replica responded). 

如果這是問題,您必須調整垃圾收集過程。通過this

爲了可視化GC操作和分代掃描和內存圖,打開JDK提供的JVisualVM工具,並安裝VisualGC插件。檢查this了。

+0

不幸的是,在這個問題之後我們停止使用Cassandra,所以我無法驗證這是否是原因。但是,我不相信這是事實,因爲如果這是GC的問題,我希望所有查詢都有相同的結果(超時)。相反,這隻發生在我沒有放置WHERE子句的時候。希望其他遇到這個問題的人會進一步評論,因爲我沒有安裝Cassandra了。 – Anakin001

+0

我有同樣的問題,我發現它與我的桌子上啓用了Solr有關。原來我試圖在非索引字段上使用WHERE子句,出於某種原因,我沒有得到有關這方面的信息。我在Solr日誌中發現了這些痕跡。在創建錯過的索引後,問題消失了。 – kazy

+0

這裏有有用的信息https://support.datastax.com/entries/69902949-ReadTimeoutException-seen-when-using-the-java-driver-caused-by-excessive-tombstones當錯誤發生時,由於許多墓碑(刪除)。建議是減少表格的gc_grace_seconds。 – jny