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

配置项作用 #

indices.recovery.max_concurrent_file_chunks 配置项用于控制在索引恢复过程中,源节点到目标节点可以并发发送的文件块请求数量

此配置限制同时进行的文件块传输数量,确保恢复目标节点不会缓冲超过限制的文件块,在恢复速度和资源消耗之间取得平衡。

配置项属性 #

  • 配置路径: indices.recovery.max_concurrent_file_chunks
  • 数据类型: Integer(整数)
  • 默认值: 2
  • 最小值: 1
  • 最大值: 5
  • 是否可选: 是
  • 作用域: NodeScope(节点级别)
  • 动态更新: 是(支持动态更新)

配置项详解 #

工作机制 #

文件块传输流程

max_concurrent_file_chunks = 2:

文件分块:
[chunk1][chunk2][chunk3][chunk4][chunk5]
    │
    ↓ 并发发送
├────────────── chunk1 ───────→ 目标节点
└────────────── chunk2 ───────→ 目标节点
    │
    ↓ 等待响应
    │
    ↓ 继续发送
    ├────────────── chunk3 ───────→
    └────────────── chunk4 ───────→

并发限制: 最多 2 个未响应的请求

并发控制逻辑 #

LocalCheckpointTracker 跟踪

发送请求:
request_seq_id_tracker.getProcessedCheckpoint() = 0
    │
    ↓
max_concurrent_chunks = 2
    │
    ↓
检查: (max_seq - processed) < max_concurrent?
    │
    ├──── 是 → 继续发送 ✅
    │
    └──── 否 → 等待响应 ⏸

目标节点缓冲 #

目标节点缓冲区

max_concurrent_file_chunks = 2:

接收缓冲:
[chunk1][chunk2]
    ↓
写入磁盘
    ↓
缓冲清空
    ↓
准备接收新块

内存保护:
- 最多缓冲 2 个文件块
- 防止内存溢出
- 确保稳定恢复

配置建议 #

生产环境(默认) #

indices:
  recovery:
    max_concurrent_file_chunks: 2  # 默认值

建议: 保持默认值 2。平衡速度和资源使用。

高性能网络 #

indices:
  recovery:
    max_concurrent_file_chunks: 4  # 4 个并发

建议: 增加到 3-5。网络带宽充足时使用。

受限网络 #

indices:
  recovery:
    max_concurrent_file_chunks: 1  # 1 个并发

建议: 减少到 1。网络带宽有限或延迟高时使用。

资源受限环境 #

indices:
  recovery:
    max_concurrent_file_chunks: 1

建议: 保持最小值。目标节点内存有限时使用。

代码示例 #

easysearch.yml 基础配置 #

indices:
  recovery:
    max_concurrent_file_chunks: 2

高速恢复配置 #

indices:
  recovery:
    max_concurrent_file_chunks: 5
    chunk_size: 1mb

慢速网络配置 #

indices:
  recovery:
    max_concurrent_file_chunks: 1
    chunk_size: 256kb

动态更新配置 #

PUT /_cluster/settings
{
  "transient": {
    "indices.recovery.max_concurrent_file_chunks": 3
  }
}

相关配置 #

配置项作用默认值
indices.recovery.max_concurrent_file_chunks文件块并发数2
indices.recovery.max_concurrent_operations操作块并发数1
indices.recovery.chunk_size文件块大小512kb
indices.recovery.max_bytes_per_sec传输速率限制40mb/s

恢复流程分析 #

完整恢复过程中的并发控制

1. 恢复启动
   │
   ↓
2. 发送事务日志操作 (operation chunks)
   max_concurrent_operations 控制
   │
   ↓
3. 发送文件数据 (file chunks)
   max_concurrent_file_chunks 控制
   │
   ↓
4. 验证和完成

性能影响分析 #

max_concurrent_file_chunks 设置优点缺点
1(最小)内存占用最小恢复最慢
2(默认)平衡速度和资源标准设置
3-4较快恢复更多内存和网络
5(最大)最快恢复资源消耗大

恢复时间估算 #

假设文件大小 1GB,块大小 512KB

总块数 = 1GB / 512KB ≈ 2048 块

chunks = 1:
每次发送 1 块
总请求次数 ≈ 2048
网络延迟 = 50ms
总时间 ≈ 2048 × 50ms = 102 秒

chunks = 2:
每次并发 2 块
总请求次数 ≈ 1024
网络延迟 = 50ms
总时间 ≈ 512 × 50ms = 25 秒

chunks = 5:
每次并发 5 块
总请求次数 ≈ 410
网络延迟 = 50ms
总时间 ≈ 410 × 50ms = 20 秒

使用场景 #

推荐使用默认值的场景 #

  • 标准网络: 正常的网络延迟和带宽
  • 标准硬件: 目标节点资源充足
  • 平衡需求: 平衡恢复速度和资源

推荐增加并发数的场景 #

  • 高速网络: 10GbE 或更快的网络
  • 充足内存: 目标节点内存充足
  • 快速恢复: 需要尽快完成恢复

推荐减少并发数的场景 #

  • 慢速网络: 网络延迟高或带宽有限
  • 内存受限: 目标节点内存紧张
  • 不稳定网络: 网络质量不稳定

内存影响分析 #

目标节点缓冲区内存

假设 chunk_size = 512KB

max_concurrent_file_chunks = 1:
缓冲 ≈ 512 KB

max_concurrent_file_chunks = 2:
缓冲 ≈ 512KB × 2 = 1 MB

max_concurrent_file_chunks = 5:
缓冲 ≈ 512KB × 5 = 2.5 MB

配合副本恢复:
每个副本都会占用相应的缓冲区

注意事项 #

  1. 默认值: 默认值为 2,适用于大多数场景。

  2. 范围限制: 最小值为 1,最大值为 5。

  3. 动态更新: 支持动态更新,修改后立即生效。

  4. 与并发操作配合: 需要与 max_concurrent_operations 协调配置。

  5. 网络条件: 根据网络带宽和延迟调整配置。

  6. 内存考虑: 并发数越高,目标节点需要更多缓冲内存。

  7. 文件块大小: 与 chunk_size 配置协同工作。

  8. 恢复类型: 影响索引恢复、副本恢复等操作。

  9. 监控建议: 监控恢复过程的速率和资源消耗。

  10. 测试验证: 配置变更后应进行恢复测试验证。