配置项作用 #
async_search.node_concurrent_running_searches 配置项限制每个节点(协调节点)同时运行的异步搜索数量。当达到此限制时,新的异步搜索请求将被拒绝,直到有正在运行的搜索完成。
配置项类型 #
该配置项为动态配置,可以在运行时通过集群更新 API 进行修改,无需重启节点。
默认值 #
20
是否必需 #
可选配置项
取值范围 #
0 ~ Integer.MAX_VALUE
0 表示无限制
工作原理 #
每个节点维护一个活跃异步搜索上下文存储(AsynchronousSearchActiveStore),用于跟踪正在运行的异步搜索:
- 接收请求:新异步搜索请求到达时,检查当前活跃搜索数量
- 限制检查:如果当前数量已达到限制,拒绝新请求
- 上下文创建:未达到限制时,创建新的异步搜索上下文
- 资源释放:搜索完成后,从活跃存储中移除上下文,释放配额
拒绝行为 #
当超过并发限制时,系统返回以下错误:
{
"error": {
"type": "rejected_execution_exception",
"reason": "Trying to create too many concurrent searches. Must be less than or equal to: [20]. This limit can be set by changing the [async_search.node_concurrent_running_searches] settings."
}
}
使用示例 #
# 默认配置(最多20个并发异步搜索)
async_search.node_concurrent_running_searches: 20
# 增加并发限制(最多100个)
async_search.node_concurrent_running_searches: 100
# 减少并发限制(最多5个)
async_search.node_concurrent_running_searches: 5
# 无限制
async_search.node_concurrent_running_searches: 0
推荐设置建议 #
生产环境建议:根据节点硬件资源和业务需求设置
推荐配置:
# 小型节点(4核8G以下)
async_search.node_concurrent_running_searches: 10
# 中型节点(8核16G)
async_search.node_concurrent_running_searches: 20
# 大型节点(16核32G以上)
async_search.node_concurrent_running_searches: 50
设置考虑因素:
- CPU资源:异步搜索会占用CPU进行查询处理
- 内存资源:每个异步搜索上下文需要维护状态和中间结果
- 线程池:需与
async_search_generic线程池大小协调 - 查询复杂度:复杂查询需要更多资源
- 业务需求:高并发场景需要适当提高限制
资源消耗估算 #
| 并发数 | 内存占用估算 | CPU占用估算 | 适用场景 |
|---|---|---|---|
| 5 | ~500MB | 低 | 小型节点 |
| 20 | ~2GB | 中 | 中型节点 |
| 50+ | ~5GB+ | 高 | 大型节点 |
注:实际资源消耗取决于查询复杂度和数据量
监控建议 #
建议监控以下指标:
# 获取异步搜索统计信息
GET /_async_search/stats
# 响应示例
{
"running": 15,
"remaining": 5,
"concurrent": 20
}
- running:当前运行的异步搜索数量
- remaining:剩余可用配额
- concurrent:配置的最大并发数
相关配置项 #
| 配置项 | 作用 | 默认值 |
|---|---|---|
thread_pool.async_search_generic | 异步搜索线程池 | core=1, max=96 |
async_search.max_search_running_time | 搜索最大运行时间 | 12小时 |
async_search.active.context.reaper_interval | 活跃上下文清理间隔 | 5分钟 |
与线程池的关系 #
异步搜索并发限制 (20)
│
▼
┌─────────────────────────────┐
│ 活跃上下文存储 │
│ (AsynchronousSearchActiveStore) │
└─────────────────────────────┘
│
▼
┌─────────────────────────────┐
│ async_search_generic 线程池 │
│ (core=1, max=96) │
└─────────────────────────────┘
两个配置需要协调:
- 并发限制:控制同时运行的异步搜索数量
- 线程池:控制执行异步搜索任务的线程数量
注意事项 #
- 动态更新:修改此配置后立即生效
- 节点级别:此限制在每个节点上独立生效
- 与普通搜索的区别:此配置仅影响异步搜索,不影响普通同步搜索
- 资源规划:设置过高可能导致节点资源耗尽,影响其他服务
- 错误处理:客户端应处理
rejected_execution_exception,实现重试或降级逻辑 - 无限制风险:设置为 0 会移除此限制,需确保节点资源足够





