配置项作用 #
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 范围内调整
配置建议 #
生产环境(默认) #
replication:
follower:
concurrent_writers_per_shard: 2 # 默认值
建议: 保持默认值 2。适合大多数场景。
高写入负载 #
replication:
follower:
concurrent_writers_per_shard: 4 # 增加并发
建议: 高写入负载时增加。注意磁盘 I/O。
低资源环境 #
replication:
follower:
concurrent_writers_per_shard: 1 # 减少并发
建议: CPU/磁盘资源受限时减少。
性能优化 #
replication:
follower:
concurrent_writers_per_shard: 8 # 高性能配置
建议: 充足资源且追求极致性能时使用。
代码示例 #
easysearch.yml 基础配置 #
replication:
follower:
concurrent_writers_per_shard: 2
平衡配置 #
replication:
follower:
concurrent_readers_per_shard: 1
concurrent_writers_per_shard: 2
高性能配置 #
replication:
follower:
concurrent_readers_per_shard: 4
concurrent_writers_per_shard: 4
动态更新配置 #
// 运行时更新
PUT /_cluster/settings
{
"persistent": {
"replication.follower.concurrent_writers_per_shard": 4
}
}
完整复制配置 #
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. 选择最优值
├── 满足性能要求
├── 资源使用合理
└── 稳定运行
注意事项 #
默认值: 默认值为
2,适合大多数场景。动态更新: 可以动态更新,但效果可能需要短暂时间。
资源消耗: 增加值会增加 CPU 和磁盘 I/O 使用。
写入顺序: Sequencer 确保操作按序写入。
磁盘类型: SSD 可以支持更高并发。
配合读取: 应与 concurrent_readers 配合调整。
监控建议: 调整后应监控磁盘 I/O 和 CPU。
测试验证: 生产环境调整前应充分测试。
边际效应: 超过一定值后收益递减。
最小值: 最小值为 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
├── 优化批量大小
└── 综合调优





