2016-07-22 65 views
0

TL; DR:我正在使用Cassandra。我正在做測試,看看它是否會處理負載,但在讀取數據時我會得到很多超時。Cassandra在AWS上讀取超時時間

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

我已經設置了一個卡桑德拉羣集上亞馬遜AWS:8個m4.xlarge實例2 EBS驅動器 - 類型「GP2」 - 100 GB的每個(一個驅動器,該數據對的其餘部分上提交日誌另一個)。這些實例位於VPC中的相同可用區域中。我使用的是Apache Cassandra 3.7的股票版本,沒有特別調整服務器或Cassandra本身。

我已經加載了10億條記錄。他們每個人都有大約30個領域。主鍵由2個分區鍵和一個聚簇列組成。每個分區鍵有大約10條記錄。複製因子是3.壓縮後,8個節點中的每一個都存儲大約40 GB的數據。

我的測試包括使用Datastax Cassandra驅動程序在基本Scala應用程序上對隨機密鑰進行1000次查詢。 WHERE子句包含分區鍵,我讀取所有記錄,即WHERE子句不包含聚類列。

當查詢是連續的,所有的查詢返回預期的結果,平均響應時間是74毫秒。

當我使用異步查詢時,立即進行所有查詢並在Future上調用get(),我在5秒鐘後(25%到75%的查詢失敗)得到很多超時。

我認爲EBS驅動器可能會受到限制,並嘗試使用不同的集羣:3個類型爲i2.xlarge的節點存儲在臨時驅動器上的數據。

請注意,在我的測試中,壓實已經停止了。在查詢期間,我沒有看到垃圾收集器正在踢。

任何想法爲什麼查詢產生超時?

回答

2

當我使用異步查詢時,立即進行所有查詢並在Futures上調用get(),5秒鐘後(25%到75%的查詢失敗)我得到很多超時。

您是否遏制了異步查詢?異步地向集羣發送了多少個選擇?

+0

DuyHai是對的,儘量不要一次發送超過100個查詢,並在發送新批之前等待它們的結果。 你很可能是DDOSing你的節點。 –

+0

我正在發送所有查詢。只有在發送完所有內容後才能嘗試檢索結果。這是代碼:https://gist.github.com/aseigneurin/b11afd1247752db952f163b6f8b9b508 –

+0

這是問題。謝謝@doanduyhai和@ alexander-dejanovski! –