【发布时间】:2016-12-24 16:01:03
【问题描述】:
我正在运行一个获取数百万行(5.000.000 左右)的查询。我的节点似乎很忙,因为协调器返回了com.datastax.driver.core.exceptions.ReadTimeoutException: Cassandra timeout during read query at consistency ONE (1 responses were required but only 0 replica responded) 异常。 (我真的不知道节点是忙还是发生了其他事情)。
到目前为止,我已经尝试在每个 Cassandra 节点中设置更高的 read_request_timeout_in_millis,并像这样执行查询
new SimpleStatement("SELECT * FROM where date = ? ",param1)
.setFetchSize(pageSize).setConsistencyLevel(ConsistencyLevel.ONE)
.setReadTimeoutMillis(ONE_DAY_IN_MILLIS);
ResultSet resultSet = this.session.execute(statement);
但是异常仍然被抛出。我的下一步是尝试自定义 RetryPolicy,但是有人可以告诉我 readTimeout 重试是否会再次执行整个查询,还是会从失败的当前页面重试?
我正在尝试这样的事情:
@Override
public RetryDecision onReadTimeout(Statement statement, ConsistencyLevel cl, int requiredResponses, int receivedResponses, boolean dataRetrieved, int nbRetry) {
if (dataRetrieved) {
return RetryDecision.ignore();
} else if (nbRetry < readRetries) {
LOGGER.info("Retry attemp {} out of {} ",nbRetry,readRetries);
return RetryDecision.retry(cl);
} else {
return RetryDecision.rethrow();
}
}
其中 readReatries 是我将尝试获取数据的重试次数。
【问题讨论】:
-
你的页面大小是多少?
-
@fuggy_yama 我正在处理 100 行的页面大小。
标签: java cassandra datastax-java-driver