--- title: "单播发现并发连接数配置" date: 2026-01-29 lastmod: 2026-01-29 description: "discovery.zen.ping.unicast.concurrent_connects 配置项用于控制种子主机解析时的最大并发连接数(已弃用)。" tags: ["集群发现", "单播发现", "并发", "已弃用"] summary: "配置项作用 # 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." --- ## 配置项作用 `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 └──────── ... 继续处理剩余节点 ``` ## 线程池行为 ```java // 可扩展线程池 executorService = EsExecutors.newScaling( "unicast_configured_hosts_resolver", 0, // 最小线程数 concurrentConnects, // 最大线程数(配置值) 60, // 空闲 60 秒后收缩 TimeUnit.SECONDS, threadFactory ); ``` ## 配置建议 ## ⚠️ 重要提示 此配置项**已被标记为弃用**,推荐使用新的 `discovery.seed_resolver.max_concurrent_resolvers` 配置。 ## 生产环境(默认) ```yaml discovery.zen.ping.unicast.concurrent_connects: 10 ``` **建议**: 保持默认值 `10`。适用于大多数生产环境。 ## 大量种子节点 ```yaml discovery.zen.ping.unicast.concurrent_connects: 20 ``` **建议**: 增加到 `15-20`。当配置了大量种子节点时使用。 ## 资源受限环境 ```yaml discovery.zen.ping.unicast.concurrent_connects: 5 ``` **建议**: 减少到 `3-5`。当系统资源有限时使用。 ## 代码示例 ## easysearch.yml 配置(已弃用) ```yaml discovery: zen: ping: unicast: concurrent_connects: 10 # 默认值 ``` ## 配合种子主机配置 ```yaml discovery: zen: ping: unicast: hosts: ["node1:9300", "node2:9300", "node3:9300"] concurrent_connects: 10 ``` ## 推荐的替代配置 ```yaml 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` | ⚠️ 已弃用 | 旧版种子主机配置 | - | ## 配置冲突检查 ```java // 不能同时配置新旧配置 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 解析时间。