StarRocks 3.3.7存算分离查询S3经常3秒超时

【详述】
StarRocks 3.3.7跑tpcds-1T,query 2等待1分钟后超时。

ERROR 1064 (HY000): starlet err [RequestID=][StatusCode=-1]Get object s3://star_cloud/b148063b-a22a-418f-8281-c5a0acf2fe8b/db11127/20851/20779/data/0000000000000584_0a94828f-27f6-42a8-9a01-48f525f3c1c3.dat error: curlCode: 28, Timeout was reached: BE:10009

查看S3网关发现,发现发起查询时,非常多的499日志

10.30.49.69 - - [01/Dec/2024:16:51:02 +0800] "GET /star_cloud/b148063b-a22a-418f-8281-c5a0acf2fe8b/db11127/11238/11195/data/0000000000000581_58dac661-a89a-4ba3-ad68-ceacd6e8e1cc.dat HTTP/1.1" 499 0 "-" "aws-sdk-cpp/1.11.267 ua/2.0 md/aws-crt#0.26.2-dev+00177dee os/Linux/3.10.0-1160.66.1.el7.x86_64 md/arch#x86_64 lang/c++#C++11 md/GCC#10.3.0 cfg/retry-mode#default api/S3" "-" "3.003" "3.002" "-" "0.000" 0 

我在BE侧设置如下参数,依然是无效。

thrift_rpc_timeout_ms = 3600000
streaming_load_rpc_max_alive_time_sec = 7200
streaming_load_max_batch_size_mb = 102400
streaming_load_max_mb = 1024000
txn_commit_rpc_timeout_ms = 360000
object_storage_connect_timeout_ms = 30000
object_storage_request_timeout_ms = 1800000
load_tablet_timeout_seconds = 3600
starlet_fslib_s3client_connect_timeout_ms = 30000
object_storage_rename_file_request_timeout_ms = 1800000

通过查看源码,s3 client的默认超时时间就是3秒,可以通过object_storage_request_timeout_ms 来延长,我已经配置了,为什么还是超时呢?
另外能否解答一下,我发现sql查询1分钟才会抛错,这是由哪个参数控制的呢?

【业务影响】S3查询超时
【是否存算分离】是
【StarRocks版本】
【集群规模】1fe + 5be
【机器信息】32C/100G/万兆

be.conf里开启aws_sdk_logging_trace_enabled = true 在starrocks目录下会生成 aws sdk的日志, 看aws的日志排查这个3s是从哪儿来的.

我刚才跟了一下发现:3秒是staros内部封装的s3client。文档中starlet_fslib_s3client_connect_timeout_ms可以调大连接时间,是否能开放starlet_fslib_s3client_request_timeout_ms的参数修改请求的超时时间?不然请求量一大,S3响应慢的时候,很容易触发超时。3秒是aws s3 client的默认请求超时时间。

make sense. 后面会提供request timeout配置修改参数.

还有一个问题没有得到解答,客户端s3获取object超时后,sql语句为啥刚好1分钟左右才会收到报错,这个时间是哪儿控制的呢?

我也遇到了这个问题,s3通信一旦延迟就会报错error: curlCode: 28, Timeout was reached
然后也是大概1分钟左右收到

可以尝试带上这个PR配置request超时时间, 看看效果.

非常感谢您