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的節點存儲在臨時驅動器上的數據。
請注意,在我的測試中,壓實已經停止了。在查詢期間,我沒有看到垃圾收集器正在踢。
任何想法爲什麼查詢產生超時?
DuyHai是對的,儘量不要一次發送超過100個查詢,並在發送新批之前等待它們的結果。 你很可能是DDOSing你的節點。 –
我正在發送所有查詢。只有在發送完所有內容後才能嘗試檢索結果。這是代碼:https://gist.github.com/aseigneurin/b11afd1247752db952f163b6f8b9b508 –
這是問題。謝謝@doanduyhai和@ alexander-dejanovski! –