我们的设置是6个节点,每个DC 3个,每个DC 3路复制。 我们用EACH_QUORUM编写。尝试使用LOCAL_QUORUM阅读。
有时,我们会因读取超时而报错:
com.datastax.driver.core.exceptions.ReadTimeoutException: Cassandra time
out during read query at consistency ALL (6 responses were required but only 5 replica responded)
我们发现此错误实际上并不表示它所说的CASSANDRA-7947。相反,这意味着已触发读取修复,但未能及时完成。
当我们因此异常而失败时,我们实际上会尝试使用QURUM read重试,而之后又因相同的异常而失败。
我们验证的是,写入和读取是在同一DC上进行的,而不是在crossDC上进行的(如果这很重要)。同样,在写入之后还会进行读取,并且不会并行发生。
任何有关如何处理此问题的指针?
任何建议将不胜感激。
表模式大致如下:
CREATE TABLE records (
firstKey text,
secondKey text,
data blob,
PRIMARY KEY (firstKey, secondKey)
) WITH read_repair_chance = 0.0
AND dclocal_read_repair_chance = 0.1
AND gc_grace_seconds = 864000
AND bloom_filter_fp_chance = 0.01
AND caching = { 'keys' : 'ALL', 'rows_per_partition' : 'NONE' }
AND comment = ''
AND compaction = { 'class' : 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold' : 32, 'min_threshold' : 4 }
AND compression = { 'chunk_length_in_kb' : 64, 'class' : 'org.apache.cassandra.io.compress.LZ4Compressor' }
AND default_time_to_live = 432000
AND speculative_retry = '99PERCENTILE'
AND min_index_interval = 128
AND max_index_interval = 2048
AND crc_check_chance = 1.0
AND cdc = false;
查询超时:
select * from records where firstKey=XXXXXXX
答案 0 :(得分:1)
在您跳下悬崖之前,我会如何处理您的情况:
1。)尝试使用LOCAL_QUORUM进行读取,如果失败,请使用LOCAL_QUORUM或什至是ONE一致性级别重试。 QUORUM比LOCAL_QUORUM强,因此在这种情况下,我不认为以更高的一致性级别进行重试不会有所帮助。在使用EACH_QUORUM进行写入时,您具有很强的一致性,因此取决于您的复制因子-如果它确实是3,则您的读取也应该与ONE保持一致。 https://docs.datastax.com/en/cassandra/3.0/cassandra/dml/dmlConfigConsistency.html
2。)我还将研究如何获取数据,例如一次获取大量数据也会导致超时。
3。)如果没有什么可改善的,并且您仍然遇到超时-即使具有一个一致性,则我建议检查您的cassandra驱动程序,因为它可能具有一些驱动程序端超时参数,并且作为最后的选择,我将更新cassandra.yaml中的range_request_timeout_in_ms和read_request_timeout_in_ms