配置项作用 #
client.transport.sniff 配置项用于控制 TransportClient 是否启用节点嗅探(sniff)功能。
节点嗅探允许 TransportClient 自动发现集群中的所有数据节点,并建立到这些节点的连接,而不仅仅是连接到手动配置的节点。
配置项属性 #
- 配置路径:
client.transport.sniff - 数据类型:
boolean - 默认值:
false - 是否可选: 是
配置项详解 #
工作模式 #
简单模式(sniff = false,默认) #
配置节点1 ←→ 客户端 ←→ 配置节点2
↓
只连接手动配置的节点
- 客户端只连接到通过
addTransportAddress()明确配置的节点 - 通过 ping 操作验证节点存活状态
- 不会发现集群中的其他节点
- 适用于节点数量固定、连接目标明确的场景
嗅探模式(sniff = true) #
配置节点1 ←→ 客户端 ←→ 配置节点2
↓ ↓
集群节点3 集群节点4
↓ ↓
集群节点5 集群节点6
自动发现所有数据节点并连接
- 客户端会向已连接的节点发送集群状态请求
- 收集集群中所有数据节点的信息
- 自动发现并连接到所有数据节点
- 定期更新节点列表(通过
nodes_sampler_interval控制)
嗅探工作流程 #
1. 连接到手动配置的节点
↓
2. 向该节点请求集群状态
↓
3. 解析集群状态中的数据节点列表
↓
4. 建立到所有数据节点的连接
↓
5. 定期重复步骤 2-4(发现新增/移除的节点)
配置建议 #
静态集群环境 #
client.transport.sniff: false
建议: 保持默认值 false。当集群节点数量固定且连接目标明确时,无需嗅探功能。
动态集群环境 #
client.transport.sniff: true
建议: 设置为 true。当集群节点数量可能动态变化(如扩容、缩容)时,启用嗅探可以自动发现新节点。
高可用性要求场景 #
client.transport.sniff: true
建议: 设置为 true。连接到所有数据节点可以实现负载均衡和故障自动切换。
网络受限环境 #
client.transport.sniff: false
建议: 保持 false。当网络环境限制客户端只能访问特定节点时,不应启用嗅探。
代码示例 #
简单模式配置 #
Settings settings = Settings.builder()
.put("cluster.name", "my-production-cluster")
.put("client.transport.sniff", false) // 默认值,可省略
.build();
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("node1.example.com"), 9300))
.addTransportAddress(new TransportAddress(InetAddress.getByName("node2.example.com"), 9300));
// 只会连接这两个手动配置的节点
嗅探模式配置 #
Settings settings = Settings.builder()
.put("cluster.name", "my-production-cluster")
.put("client.transport.sniff", true) // 启用节点嗅探
.put("client.transport.nodes_sampler_interval", "5s") // 控制嗅探频率
.build();
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("seed-node1.example.com"), 9300));
// 会自动发现并连接集群中的所有数据节点
配合采样间隔使用 #
Settings settings = Settings.builder()
.put("client.transport.sniff", true)
.put("client.transport.nodes_sampler_interval", "10s") // 每 10 秒更新一次节点列表
.build();
相关配置 #
| 配置项 | 作用 | 默认值 |
|---|---|---|
client.transport.nodes_sampler_interval | 节点采样/嗅探的执行间隔 | 5s |
client.transport.ping_timeout | 节点检测超时时间 | 5s |
client.transport.ignore_cluster_name | 是否忽略集群名称检查 | false |
配置配合说明 #
- sniff + nodes_sampler_interval: 控制嗅探的执行频率
- sniff + ping_timeout: 控制获取集群状态请求的超时时间
- sniff + ignore_cluster_name: 控制是否验证集群名称
两种模式对比 #
| 特性 | 简单模式(false) | 嗅探模式(true) |
|---|---|---|
| 连接范围 | 仅手动配置的节点 | 所有数据节点 |
| 负载均衡 | 限于配置的节点 | 自动分发到所有节点 |
| 节点发现 | 无自动发现 | 自动发现新节点 |
| 网络开销 | 较低 | 稍高(定期获取集群状态) |
| 适用场景 | 节点固定、连接明确 | 动态集群、高可用要求 |
注意事项 #
仅适用于 TransportClient: 此配置项只影响基于传输协议的 Java 客户端。
TransportClient 已弃用: 在 Easysearch 8.0 及更高版本中,TransportClient 已被弃用,建议迁移到 RestClient。
初始节点的重要性: 即使启用嗅探,仍需配置至少一个初始节点用于启动和获取集群状态。
嗅探只发现数据节点: 嗅探功能只会发现和连接到数据节点,不会连接到仅主节点(master-only nodes)或协调节点。
定期更新: 节点列表会按照
nodes_sampler_interval配置的间隔定期更新,自动响应集群拓扑变化。网络考虑: 如果客户端与集群之间存在防火墙或网络限制,嗅探可能无法正常工作。





