📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

配置项作用 #

async_search.node_concurrent_running_searches 配置项限制每个节点(协调节点)同时运行的异步搜索数量。当达到此限制时,新的异步搜索请求将被拒绝,直到有正在运行的搜索完成。

配置项类型 #

该配置项为动态配置,可以在运行时通过集群更新 API 进行修改,无需重启节点。

默认值 #

20

是否必需 #

可选配置项

取值范围 #

0 ~ Integer.MAX_VALUE
0 表示无限制

工作原理 #

每个节点维护一个活跃异步搜索上下文存储(AsynchronousSearchActiveStore),用于跟踪正在运行的异步搜索:

  1. 接收请求:新异步搜索请求到达时,检查当前活跃搜索数量
  2. 限制检查:如果当前数量已达到限制,拒绝新请求
  3. 上下文创建:未达到限制时,创建新的异步搜索上下文
  4. 资源释放:搜索完成后,从活跃存储中移除上下文,释放配额

拒绝行为 #

当超过并发限制时,系统返回以下错误:

{
  "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

设置考虑因素:

  1. CPU资源:异步搜索会占用CPU进行查询处理
  2. 内存资源:每个异步搜索上下文需要维护状态和中间结果
  3. 线程池:需与 async_search_generic 线程池大小协调
  4. 查询复杂度:复杂查询需要更多资源
  5. 业务需求:高并发场景需要适当提高限制

资源消耗估算 #

并发数内存占用估算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)           │
└─────────────────────────────┘

两个配置需要协调:

  • 并发限制:控制同时运行的异步搜索数量
  • 线程池:控制执行异步搜索任务的线程数量

注意事项 #

  1. 动态更新:修改此配置后立即生效
  2. 节点级别:此限制在每个节点上独立生效
  3. 与普通搜索的区别:此配置仅影响异步搜索,不影响普通同步搜索
  4. 资源规划:设置过高可能导致节点资源耗尽,影响其他服务
  5. 错误处理:客户端应处理 rejected_execution_exception,实现重试或降级逻辑
  6. 无限制风险:设置为 0 会移除此限制,需确保节点资源足够