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

配置项作用 #

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.bulk3批量操作连接数
transport.connections_per_node.recovery2恢复连接数
transport.connections_per_node.reg6常规操作连接数
transport.connections_per_node.state1状态操作连接数

工作原理 #

批量操作连接管理:

┌─────────────────────────────────────────────────────────────────┐
│                    批量操作连接使用场景                           │
└─────────────────────────────────────────────────────────────────┘

客户端发起批量索引请求
    │
    ├── 协调节点接收请求
    │
    ├── 将请求转发到数据节点
    │   │
    │   └── 使用 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. 检查批量大小
   # 太小的批量 → 合并
   # 太大的批量 → 拆分

注意事项 #

  1. 静态配置:修改需要重启节点
  2. 双向连接:每个方向的连接数
  3. 资源消耗:增加连接会增加内存和线程使用
  4. 与线程池配合:应与写线程池大小协调
  5. 网络带宽:确保网络带宽足够
  6. 边际效应:超过一定值后收益递减