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

配置项作用 #

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. 选择最优值
   ├── 满足性能要求
   ├── 资源使用合理
   └── 稳定运行

注意事项 #

  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
├── 优化批量大小
└── 综合调优