配置项作用 #
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
配合副本恢复:
每个副本都会占用相应的缓冲区
注意事项 #
默认值: 默认值为
2,适用于大多数场景。范围限制: 最小值为 1,最大值为 5。
动态更新: 支持动态更新,修改后立即生效。
与并发操作配合: 需要与
max_concurrent_operations协调配置。网络条件: 根据网络带宽和延迟调整配置。
内存考虑: 并发数越高,目标节点需要更多缓冲内存。
文件块大小: 与
chunk_size配置协同工作。恢复类型: 影响索引恢复、副本恢复等操作。
监控建议: 监控恢复过程的速率和资源消耗。
测试验证: 配置变更后应进行恢复测试验证。





