--- title: "每节点批量操作连接数配置" date: 2026-01-18 lastmod: 2026-01-18 description: "控制每节点批量操作连接数量的配置项说明" tags: ["传输配置", "性能优化", "批量操作"] summary: "配置项作用 # 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." --- ## 配置项作用 `transport.connections_per_node.bulk` 配置项控制集群中每个节点之间用于批量操作(Bulk Operations)的并发连接数。批量操作包括批量索引(Bulk Indexing)、批量更新等大数据量写入操作。增加此值可以提高批量写入吞吐量,但也会消耗更多资源。 ## 配置项类型 该配置项为**静态配置**,需要在启动时设置,修改后需要重启节点才能生效。 ## 默认值 ``` 3 ``` ## 是否必需 **可选配置项**(有默认值) ## 取值范围 ``` 1 ~ 正整数 ``` ## 配置格式 ```yaml # 默认配置 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. 默认配置(推荐) ```yaml transport.connections_per_node.bulk: 3 ``` 适用于大多数集群配置,平衡性能和资源使用。 ### 2. 高吞吐量场景 ```yaml transport.connections_per_node.bulk: 6 ``` **适用场景:** - 大量日志写入 - 数据导入场景 - 高性能网络 - 节点资源充足 ### 3. 资源受限环境 ```yaml transport.connections_per_node.bulk: 2 ``` **适用场景:** - 网络带宽有限 - 节点资源紧张 - 批量操作较少 - 小规模集群 ### 4. 极致性能场景 ```yaml 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 文档 ``` ## 配置示例 ```yaml # 场景 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 ``` ## 监控建议 ```bash # 查看当前配置 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. 检查批量大小 # 太小的批量 → 合并 # 太大的批量 → 拆分 ``` ## 注意事项 1. **静态配置**:修改需要重启节点 2. **双向连接**:每个方向的连接数 3. **资源消耗**:增加连接会增加内存和线程使用 4. **与线程池配合**:应与写线程池大小协调 5. **网络带宽**:确保网络带宽足够 6. **边际效应**:超过一定值后收益递减