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

配置项作用 #

discovery.zen.ping.unicast.concurrent_connects 配置项用于控制种子主机解析时的最大并发连接数

当节点解析配置的种子主机列表时,此配置决定了同时可以发起多少个并发连接。

配置项属性 #

  • 配置路径: discovery.zen.ping.unicast.concurrent_connects
  • 数据类型: integer
  • 默认值: 10
  • 最小值: 0
  • 是否可选: 是
  • 弃用状态: ⚠️ 已弃用

配置项详解 #

工作机制 #

种子主机解析流程

配置的种子主机列表:
- node1.example.com:9300
- node2.example.com:9300
- node3.example.com:9300
- ...
- node50.example.com:9300

并发连接数 = 10

开始解析
    │
    ↓
创建线程池 (0 到 concurrent_connects)
    │
    ├──────── 并发连接 1-10 ──→ node1
    ├──────── 并发连接 11-20 ─→ node2
    ├──────── 并发连接 21-30 ─→ node3
    └──────── ... 继续处理剩余节点

线程池行为 #

// 可扩展线程池
executorService = EsExecutors.newScaling(
    "unicast_configured_hosts_resolver",
    0,                      // 最小线程数
    concurrentConnects,    // 最大线程数(配置值)
    60,                     // 空闲 60 秒后收缩
    TimeUnit.SECONDS,
    threadFactory
);

配置建议 #

⚠️ 重要提示 #

此配置项已被标记为弃用,推荐使用新的 discovery.seed_resolver.max_concurrent_resolvers 配置。

生产环境(默认) #

discovery.zen.ping.unicast.concurrent_connects: 10

建议: 保持默认值 10。适用于大多数生产环境。

大量种子节点 #

discovery.zen.ping.unicast.concurrent_connects: 20

建议: 增加到 15-20。当配置了大量种子节点时使用。

资源受限环境 #

discovery.zen.ping.unicast.concurrent_connects: 5

建议: 减少到 3-5。当系统资源有限时使用。

代码示例 #

easysearch.yml 配置(已弃用) #

discovery:
  zen:
    ping:
      unicast:
        concurrent_connects: 10  # 默认值

配合种子主机配置 #

discovery:
  zen:
    ping:
      unicast:
        hosts: ["node1:9300", "node2:9300", "node3:9300"]
        concurrent_connects: 10

推荐的替代配置 #

discovery:
  seed_resolver:
    max_concurrent_resolvers: 10  # 新配置(推荐)

相关配置 #

配置项状态作用默认值
discovery.zen.ping.unicast.concurrent_connects⚠️ 已弃用旧版并发连接配置10
discovery.seed_resolver.max_concurrent_resolvers✅ 推荐新版并发解析器配置10
discovery.zen.ping.unicast.hosts⚠️ 已弃用旧版种子主机配置-

配置冲突检查 #

// 不能同时配置新旧配置
if (LEGACY_CONCURRENT_CONNECTS_SETTING.exists(settings)) {
    if (MAX_CONCURRENT_RESOLVERS_SETTING.exists(settings)) {
        throw new IllegalArgumentException(
            "it is forbidden to set both [" +
            "discovery.seed_resolver.max_concurrent_resolvers] and [" +
            "discovery.zen.ping.unicast.concurrent_connects]"
        );
    }
}

性能影响分析 #

concurrent_connects 设置优点缺点
较小(3-5)资源消耗少解析速度慢
中等(10)平衡速度和资源标准设置
较大(20+)解析速度快资源消耗高

解析时间对比 #

假设有 50 个种子节点,单个连接耗时 100ms

concurrent_connects = 5:
轮次 = 50 / 5 = 10 轮
总时间 ≈ 10 × 100ms = 1 秒

concurrent_connects = 10:
轮次 = 50 / 10 = 5 轮
总时间 ≈ 5 × 100ms = 0.5 秒

concurrent_connects = 25:
轮次 = 50 / 25 = 2 轮
总时间 ≈ 2 × 100ms = 0.2 秒

使用场景 #

推荐保持默认的场景 #

  • 标准集群: 种子节点数量适中
  • 稳定网络: 连接建立时间正常
  • 资源充足: 有足够的网络和线程资源

推荐增加的场景 #

  • 大量种子节点: 配置了 20+ 个种子节点
  • 高延迟网络: 单个连接建立较慢
  • **快速启动: 需要快速完成集群发现

推荐减少的场景 #

  • 资源受限: CPU 或网络资源有限
  • 少量种子节点: 只有几个种子节点
  • 连接限制: 网络设备有连接数限制

注意事项 #

  1. 已弃用: 此配置已被标记为弃用,建议迁移到新配置。

  2. 不能同时配置: 不能同时设置旧版和新版配置,会报错。

  3. 线程池收缩: 空闲 60 秒后线程池会自动收缩,释放资源。

  4. 动态范围: 线程池从 0 到配置值动态调整。

  5. 网络限制: 考虑网络设备的最大连接数限制。

  6. 监控建议: 监控种子主机解析的完成时间和资源使用。

  7. 测试验证: 在生产环境使用前,在测试环境中验证配置效果。

  8. DNS 解析: 如果使用主机名而不是 IP,还需要考虑 DNS 解析时间。