我有問題Cassandra ReadTimeOuts。 場景:加載到卡桑德拉Cassandra ReadTimeOuts
- 3 GB數據,
- 9個1個數據中心內Cassandra的節點,
- 複製等於3,
- 一致性水平等於1,
- 卡桑德拉版本2.2.9
鏈接cassandra.yaml https://pastebin.com/x0bF7nLf
測試: 對於測試我使用Cassandra的jmeter插件。 請求是在提供的ID列表中提供行ID的條件選擇。列表總是包含100個ID。每個請求應始終返回100行(所有ID都在數據庫中)。 ID是隨機的,所以緩存角色會減少。
樣品選擇:
select * from price.item_vat_posting_group where no in ('B7B7A6','B2DD05','A34751','B4BC7D','C0BB53','D07DCB','C03716','BB99DF','A975C2','C2AE27','AF621C','242448','B30CDA','508336','B44D6B','D07422','AC44EA','C6F34D','9B25AC','C4CF12','AC25BD','C3D9C7','AE7DB2','C5E03E','BF7AC1','B499B5','A7787E','645180','A9BEFE','AFFEA4','A88955','D95B50','B0F9FC','C09174','253953','9ED9CA','CAF896','536951','214502','427776','DA14CB','422282','A4B10A','C56BF5','B373E0','D171EF','C70607','B350AB','9D809B','586563','BF6308','A4BF5A','C42716','C3261C','C45B79','C6FE55','D1F0D4','C483B5','A67D59','DC5898','9BACAD','D9C6B0','D17DAE','D8D4F3','A05946','BBEBA8','A87B37','A13E97','BB7099','A3FC26','C461DF','309810','BF6306','D07603','C59F70','C5906C','A515ED','B50056','A8390E','A0CCC7','BF2713','C6EC7D','D7EB9D','A5D5EB','984076','D88F44','257058','D61635','D40CDE','B0A347','B7617F','D6277E','B4286F','C41F99','D84232','DC1636','BFF15D','DD0972','9B3138');
方案1. 而在時間10分鐘卡桑德拉具有用於處理的請求的總數的5個%ReadTimeOuts發送請求由100個線程。 平均請求時間爲100毫秒。 每個Cassandra節點上的處理器使用率在40% - 50%之間。
場景2. 在24小時內由4個線程發送請求時,每10萬次請求發生大約10次ReadTimeOut。 每個Cassandra節點上的處理器使用率爲5%。
在這兩種情況下垃圾收集器的工作時間少於300毫秒。
錯誤消息:
Cassandra time-out during read query at consistency LOCAL_ONE (1 responses were required but only 0 replica responded) com.datastax.driver.core.exceptions.ReadTimeoutException: Cassandra timeout during read query at consistency LOCAL_ONE (1 responses were required but only 0 replica responded) at com.datastax.driver.core.exceptions.ReadTimeoutException.copy(ReadTimeoutException.java:69) at com.datastax.driver.core.DefaultResultSetFuture.extractCauseFromExecutionException(DefaultResultSetFuture.java:258)
一些統計數據:
問題:
那是典型的卡桑德拉還是我做錯了什麼?
感謝您的重播。但即使我已經消除「在查詢中」,仍然有ReadTimeOuts。在12小時內通過6000線程發送請求時,我獲得了0,01%的超時。這是正常的嗎? – pawski
看起來好,但如果它不適合你,你可以改變你的數據模型,以便你可以指定分區鍵並執行範圍查詢。 –
我的數據模型非常簡單。只有一個表中的幾個屬性。最後:ONE REQUEST等於ONE表中的一個查詢。 – pawski