--- title: "恢复并发文件块数配置" date: 2026-03-06 lastmod: 2026-03-06 description: "indices.recovery.max_concurrent_file_chunks 配置项用于控制恢复过程中并发发送的文件块请求数量。" tags: ["恢复", "并发控制", "网络传输", "分片恢复"] summary: "配置项作用 # 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." --- ## 配置项作用 `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 个文件块 - 防止内存溢出 - 确保稳定恢复 ``` ## 配置建议 ## 生产环境(默认) ```yaml indices: recovery: max_concurrent_file_chunks: 2 # 默认值 ``` **建议**: 保持默认值 `2`。平衡速度和资源使用。 ## 高性能网络 ```yaml indices: recovery: max_concurrent_file_chunks: 4 # 4 个并发 ``` **建议**: 增加到 `3-5`。网络带宽充足时使用。 ## 受限网络 ```yaml indices: recovery: max_concurrent_file_chunks: 1 # 1 个并发 ``` **建议**: 减少到 `1`。网络带宽有限或延迟高时使用。 ## 资源受限环境 ```yaml indices: recovery: max_concurrent_file_chunks: 1 ``` **建议**: 保持最小值。目标节点内存有限时使用。 ## 代码示例 ## easysearch.yml 基础配置 ```yaml indices: recovery: max_concurrent_file_chunks: 2 ``` ## 高速恢复配置 ```yaml indices: recovery: max_concurrent_file_chunks: 5 chunk_size: 1mb ``` ## 慢速网络配置 ```yaml indices: recovery: max_concurrent_file_chunks: 1 chunk_size: 256kb ``` ## 动态更新配置 ```json 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. **测试验证**: 配置变更后应进行恢复测试验证。