--- title: "跟随者分片并发写入数配置" date: 2026-01-23 lastmod: 2026-01-23 description: "replication.follower.concurrent_writers_per_shard 配置项用于控制每个分片的复制并发写入线程数。" tags: ["Replication", "跨集群复制", "并发", "写入性能"] summary: "配置项作用 # replication.follower.concurrent_writers_per_shard 配置项用于控制每个分片的复制并发写入线程数。 此配置决定了将复制操作写入 Follower 索引的并发度,直接影响复制的写入性能和资源消耗。 配置项属性 # 配置路径: replication.follower.concurrent_writers_per_shard 数据类型: Integer(整数值) 默认值: 2 最小值: 1 是否可选: 是 作用域: NodeScope(节点级别) 动态更新: 是(可以动态更新,无需重启) 配置项详解 # 工作机制 # 并发写入机制 concurrent_writers = 2 (默认): 分片 0: ├── Writer 1 │ ├── 写入批次 1 (奇数) │ └── 并发执行 └── Writer 2 ├── 写入批次 2 (偶数) └── 并发执行 信号量控制: val rateLimiter = Semaphore(writersPerShard) │ ├── 获取许可证 ├── 执行写入 ├── 释放许可证 └── 限制并发 写入流程: 1." --- ## 配置项作用 `replication.follower.concurrent_writers_per_shard` 配置项用于控制**每个分片的复制并发写入线程数**。 此配置决定了将复制操作写入 Follower 索引的并发度,直接影响复制的写入性能和资源消耗。 ## 配置项属性 - **配置路径**: `replication.follower.concurrent_writers_per_shard` - **数据类型**: `Integer`(整数值) - **默认值**: `2` - **最小值**: `1` - **是否可选**: 是 - **作用域**: NodeScope(节点级别) - **动态更新**: **是**(可以动态更新,无需重启) ## 配置项详解 ## 工作机制 ``` 并发写入机制 concurrent_writers = 2 (默认): 分片 0: ├── Writer 1 │ ├── 写入批次 1 (奇数) │ └── 并发执行 └── Writer 2 ├── 写入批次 2 (偶数) └── 并发执行 信号量控制: val rateLimiter = Semaphore(writersPerShard) │ ├── 获取许可证 ├── 执行写入 ├── 释放许可证 └── 限制并发 写入流程: 1. Sequencer 排序操作 2. Writer 获取许可证 3. 执行批量写入 4. 释放许可证 5. 继续下一批次 效果: ├── 提高写入吞吐 ├── 减少写入延迟 ├── 增加资源使用 └── 并行写入操作 ``` ## 读写配合 ``` 读写并发平衡 读取端 (readers): ├── 从 Leader 读取 ├── 数量: concurrent_readers └── 供应数据 排序端 (sequencer): ├── 接收来自 readers ├── 按序排列 └── 提供给 writers 写入端 (writers): ├── 写入本地索引 ├── 数量: concurrent_writers └── 消费数据 平衡配置: ├── readers = 1, writers = 2 (默认) │ └── 写入快于读取 ✅ ├── readers = 2, writers = 2 │ └── 读写平衡 ✅ └── readers = 4, writers = 4 └── 高性能 ✅ ``` ## 性能影响 ``` 并发写入性能影响 writers = 1: ├── 单线程写入 ├── CPU: 基准 ├── 磁盘 I/O: 串行 ├── 吞吐: 基准 └── 延迟: 较高 ❌ writers = 2 (默认): ├── 双线程写入 ├── CPU: +50% ├── 磁盘 I/O: 并行 ├── 吞吐: +60% ✅ └── 延迟: -30% ✅ writers = 4: ├── 四线程写入 ├── CPU: +150% ├── 磁盘 I/O: 高度并行 ├── 吞吐: +120% ✅ └── 延迟: -50% ✅ 边际效应: ├── 1→2: 显著提升 ✅ ├── 2→4: 有提升 ├── 4→8: 提升有限 └── 建议: 1-4 范围内调整 ``` ## 配置建议 ## 生产环境(默认) ```yaml replication: follower: concurrent_writers_per_shard: 2 # 默认值 ``` **建议**: 保持默认值 `2`。适合大多数场景。 ## 高写入负载 ```yaml replication: follower: concurrent_writers_per_shard: 4 # 增加并发 ``` **建议**: 高写入负载时增加。注意磁盘 I/O。 ## 低资源环境 ```yaml replication: follower: concurrent_writers_per_shard: 1 # 减少并发 ``` **建议**: CPU/磁盘资源受限时减少。 ## 性能优化 ```yaml replication: follower: concurrent_writers_per_shard: 8 # 高性能配置 ``` **建议**: 充足资源且追求极致性能时使用。 ## 代码示例 ## easysearch.yml 基础配置 ```yaml replication: follower: concurrent_writers_per_shard: 2 ``` ## 平衡配置 ```yaml replication: follower: concurrent_readers_per_shard: 1 concurrent_writers_per_shard: 2 ``` ## 高性能配置 ```yaml replication: follower: concurrent_readers_per_shard: 4 concurrent_writers_per_shard: 4 ``` ## 动态更新配置 ```json // 运行时更新 PUT /_cluster/settings { "persistent": { "replication.follower.concurrent_writers_per_shard": 4 } } ``` ## 完整复制配置 ```yaml replication: follower: concurrent_readers_per_shard: 1 concurrent_writers_per_shard: 2 index: ops_batch_size: 50000 ``` ## 相关配置 | 配置项 | 作用 | 默认值 | |--------|------|--------| | `concurrent_writers_per_shard` | 并发写入数 | 2 | | `concurrent_readers_per_shard` | 并发读取数 | 1 | | `index.ops_batch_size` | 批量大小 | 50000 | ## 性能影响分析 | concurrent_writers 设置 | 优点 | 缺点 | |------------------------|------|------| | 1 | 资源占用少 | 吞吐量低、延迟高 | | 2(默认) | 平衡性能和资源 | - | | 4 | 高吞吐、低延迟 | 资源占用高 | ## 使用场景 ## 推荐使用默认值的场景 - **标准部署**: 大多数生产环境 - **中等写入负载**: 每秒数千次操作 - **资源受限**: CPU/磁盘资源有限 - **稳定优先**: 追求稳定性 ## 推荐增加并发的场景 - **高写入负载**: 每秒数万次操作 - **低延迟要求**: 需要快速完成复制 - **充足资源**: 有足够的 CPU 和磁盘 I/O - **SSD 存储**: 使用高性能存储 ## 调优建议 ``` 并发调优流程 1. 监控当前性能 ├── 写入延迟 ├── 写入吞吐量 ├── CPU 使用率 └── 磁盘 I/O 使用 2. 确定瓶颈 ├── 写入慢 → 增加 writers ├── CPU 满 → 考虑减少 ├── I/O 瓶颈 → 升级存储 └── 综合评估 3. 测试不同配置 ├── 1 → 测试基准 ├── 2 → 测试默认 ├── 4 → 测试高性能 └── 测量效果 4. 选择最优值 ├── 满足性能要求 ├── 资源使用合理 └── 稳定运行 ``` ## 注意事项 1. **默认值**: 默认值为 `2`,适合大多数场景。 2. **动态更新**: 可以动态更新,但效果可能需要短暂时间。 3. **资源消耗**: 增加值会增加 CPU 和磁盘 I/O 使用。 4. **写入顺序**: Sequencer 确保操作按序写入。 5. **磁盘类型**: SSD 可以支持更高并发。 6. **配合读取**: 应与 concurrent_readers 配合调整。 7. **监控建议**: 调整后应监控磁盘 I/O 和 CPU。 8. **测试验证**: 生产环境调整前应充分测试。 9. **边际效应**: 超过一定值后收益递减。 10. **最小值**: 最小值为 1,不能设置为 0。 ## 最佳实践 ``` 并发配置最佳实践 1. 标准部署 replication: follower: concurrent_writers_per_shard: 2 ├── 默认值 ├── 稳定可靠 └── 推荐 ✅ 2. 高负载场景 replication: follower: concurrent_writers_per_shard: 4 concurrent_readers_per_shard: 2 ├── 提高吞吐 ├── 降低延迟 └── 监控资源 3. 读写平衡 replication: follower: concurrent_readers_per_shard: 1 concurrent_writers_per_shard: 2 ├── 写入略快于读取 ├── 避免积压 └── 平衡配置 ✅ 4. 资源受限 replication: follower: concurrent_writers_per_shard: 1 concurrent_readers_per_shard: 1 ├── 最小资源占用 ├── 稳定运行 └── 安全配置 5. 性能调优 ├── 从默认值开始 ├── 逐步增加 ├── 测量效果 └── 找到最优值 ``` ## 故障排查 ``` 常见问题排查 问题 1: 写入延迟高 检查: ├── concurrent_writers 设置 ├── 磁盘 I/O 状态 ├── CPU 使用率 └── 写入队列长度 解决: ├── 增加 concurrent_writers ├── 检查磁盘性能 ├── 优化批量大小 └── 升级存储 问题 2: CPU 使用率高 检查: ├── concurrent_writers 设置 ├── concurrent_readers 设置 ├── 写入线程数 └── CPU 核心数 解决: ├── 减少 concurrent_writers ├── 减少并发总数 ├── 优化批量大小 └── 增加 CPU 核心 问题 3: 复制吞吐低 检查: ├── writers/readers 配置 ├── 网络带宽 ├── 磁盘 I/O └── 批量大小 解决: ├── 增加 concurrent_writers ├── 增加 concurrent_readers ├── 优化批量大小 └── 综合调优 ```