配置项作用 #
transport.connections_per_node.bulk 配置项控制集群中每个节点之间用于批量操作(Bulk Operations)的并发连接数。批量操作包括批量索引(Bulk Indexing)、批量更新等大数据量写入操作。增加此值可以提高批量写入吞吐量,但也会消耗更多资源。
配置项类型 #
该配置项为静态配置,需要在启动时设置,修改后需要重启节点才能生效。
默认值 #
3
是否必需 #
可选配置项(有默认值)
取值范围 #
1 ~ 正整数
配置格式 #
# 默认配置
transport.connections_per_node.bulk: 3
# 增加批量连接数
transport.connections_per_node.bulk: 6
# 减少批量连接数
transport.connections_per_node.bulk: 2
# 高吞吐量场景
transport.connections_per_node.bulk: 10
相关配置项 #
| 配置项 | 默认值 | 说明 |
|---|---|---|
transport.connections_per_node.bulk | 3 | 批量操作连接数 |
transport.connections_per_node.recovery | 2 | 恢复连接数 |
transport.connections_per_node.reg | 6 | 常规操作连接数 |
transport.connections_per_node.state | 1 | 状态操作连接数 |
工作原理 #
批量操作连接管理:
┌─────────────────────────────────────────────────────────────────┐
│ 批量操作连接使用场景 │
└─────────────────────────────────────────────────────────────────┘
客户端发起批量索引请求
│
├── 协调节点接收请求
│
├── 将请求转发到数据节点
│ │
│ └── 使用 bulk 连接池
│ │
│ ├── 可用连接 > 0
│ │ │
│ │ └── 获取连接,发送数据
│ │
│ └── 可用连接 = 0
│ │
│ └── 等待连接释放
│
└── 连接池大小 = bulk 配置值
- 并发批量操作数受此限制
批量操作类型 #
使用 bulk 连接的操作类型:
1. 批量索引 (Bulk Index)
POST /_bulk
- 大量文档写入
- 最常见的批量操作
2. 批量更新 (Bulk Update)
POST /_bulk
- 更新现有文档
- 中等数据量
3. 批量删除 (Bulk Delete)
POST /_bulk
- 删除多个文档
- 小数据量
4. 更新操作 (Update By Query)
POST /_update_by_query
- 批量更新查询结果
- 中等数据量
使用场景 #
1. 默认配置(推荐) #
transport.connections_per_node.bulk: 3
适用于大多数集群配置,平衡性能和资源使用。
2. 高吞吐量场景 #
transport.connections_per_node.bulk: 6
适用场景:
- 大量日志写入
- 数据导入场景
- 高性能网络
- 节点资源充足
3. 资源受限环境 #
transport.connections_per_node.bulk: 2
适用场景:
- 网络带宽有限
- 节点资源紧张
- 批量操作较少
- 小规模集群
4. 极致性能场景 #
transport.connections_per_node.bulk: 10
适用场景:
- 大数据量导入
- 高性能网络(万兆)
- 专用数据加载节点
- 临时提高吞吐量
推荐设置建议 #
| 场景 | 网络条件 | 推荐值 | 说明 |
|---|---|---|---|
| 日志收集 | 千兆 | 3-6 | 批量写入频繁 |
| 实时分析 | 千兆 | 3 | 默认即可 |
| 批量导入 | 万兆 | 6-10 | 最大化吞吐量 |
| 小规模集群 | 百兆 | 2-3 | 节省资源 |
| 低频写入 | 任意 | 2-3 | 默认即可 |
性能影响分析 #
连接数对批量性能的影响:
增加连接数 (从 3 增加到 6):
优点:
✓ 提高批量写入吞吐量
✓ 减少批量操作延迟
✓ 更好利用网络带宽
✓ 支持更多并发批量请求
缺点:
✗ 增加内存使用
✗ 增加线程开销
✗ 可能影响其他操作
✗ 网络饱和风险
减少连接数 (从 3 减少到 1):
优点:
✓ 减少资源使用
✓ 简化连接管理
缺点:
✗ 降低批量吞吐量
✗ 增加批量操作延迟
✗ 可能成为瓶颈
与线程池配置的关系 #
批量操作相关配置协作:
1. transport.connections_per_node.bulk
- 节点间连接数
- 默认: 3
2. thread_pool.write
- 写入线程池
- 默认: fixed, size = cpu * 2
- queue_size: 200 (可调整)
3. thread_pool.bulk
- 批量操作线程池
- 在某些版本中存在
- 通常与 write 共享
建议:
连接数应与线程池大小匹配
过多连接而线程不足 → 浪费
过少连接而线程充足 → 浪费
批量写入优化建议 #
优化批量写入性能的完整配置:
# 传输层配置
transport.connections_per_node.bulk: 6
# 线程池配置
thread_pool.write.size: 16
thread_pool.write.queue_size: 1000
# 刷新配置
index.refresh_interval: 30s
# translog 配置
index.translog.durability: async
index.translog.sync_interval: 5s
# 批量大小建议
- 每批 5-15 MB 数据
- 每批 1000-10000 文档
配置示例 #
# 场景 1: 日志收集集群
cluster.name: logs-cluster
transport.connections_per_node.bulk: 6
thread_pool.write.size: 16
thread_pool.write.queue_size: 1000
# 场景 2: 标准业务集群
cluster.name: business-cluster
transport.connections_per_node.bulk: 3
thread_pool.write.size: 8
# 场景 3: 数据导入专用
cluster.name: import-cluster
transport.connections_per_node.bulk: 10
thread_pool.write.size: 32
监控建议 #
# 查看当前配置
GET /_nodes/settings?filter_path=nodes.*.transport.connections_per_node
# 查看批量操作统计
GET /_nodes/stats/transport?filter_path=**.bulk
# 查看线程池状态
GET /_cat/thread_pool/write?v
# 查看索引速率
GET /_cat/nodes?v&h=name,index*,bulk*
性能测试建议 #
批量写入性能测试步骤:
1. 设置基准配置
transport.connections_per_node.bulk: 3
2. 运行基准测试
- 记录吞吐量
- 记录延迟
- 记录资源使用
3. 逐步增加连接数
- 3 → 6 → 10
4. 对比性能数据
- 找出最优配置
- 注意边际效应
5. 监控资源使用
- CPU
- 内存
- 网络
故障排查 #
批量写入慢问题排查:
1. 检查连接配置
GET /_nodes/settings?filter_path=*.transport.connections_per_node.bulk
2. 检查线程池状态
GET /_cat/thread_pool/write?v
# 如果队列满,考虑增加连接或线程
3. 检查网络使用
iftop, nethogs
# 如果网络饱和,增加连接可能无效
4. 检查磁盘 IO
iostat -x 1
# 如果磁盘瓶颈,增加连接可能无效
5. 检查批量大小
# 太小的批量 → 合并
# 太大的批量 → 拆分
注意事项 #
- 静态配置:修改需要重启节点
- 双向连接:每个方向的连接数
- 资源消耗:增加连接会增加内存和线程使用
- 与线程池配合:应与写线程池大小协调
- 网络带宽:确保网络带宽足够
- 边际效应:超过一定值后收益递减





