--- title: "客户端类型配置" date: 2026-02-15 lastmod: 2026-02-15 description: "控制 Easysearch 客户端类型的配置项说明" tags: ["客户端", "连接模式", "架构配置"] summary: "配置项作用 # client.type 配置项指定 Easysearch 客户端的类型,决定客户端与集群的连接方式和行为模式。 配置项类型 # 该配置项为静态配置,需要在启动时设置,修改后需要重启节点才能生效。 默认值 # node 是否必需 # 可选配置项 配置值说明 # 值 说明 node 节点客户端(默认) transport 传输客户端 客户端类型详解 # 1. Node Client(节点客户端) # 节点客户端是默认的客户端类型,具有以下特点: ┌─────────────────────────────────────┐ │ Node Client │ │ (作为集群的一部分运行) │ └─────────────────────────────────────┘ │ ├─→ 加入集群 ├─→ 参与集群状态 ├─→ 持有数据(可选) ├─→ 执行分布式操作 └─→ 本地执行请求 特点:" --- ## 配置项作用 `client.type` 配置项指定 Easysearch 客户端的类型,决定客户端与集群的连接方式和行为模式。 ## 配置项类型 该配置项为**静态配置**,需要在启动时设置,修改后需要重启节点才能生效。 ## 默认值 ``` node ``` ## 是否必需 **可选配置项** ## 配置值说明 | 值 | 说明 | |---|---| | `node` | 节点客户端(默认) | | `transport` | 传输客户端 | ## 客户端类型详解 ### 1. Node Client(节点客户端) 节点客户端是默认的客户端类型,具有以下特点: ``` ┌─────────────────────────────────────┐ │ Node Client │ │ (作为集群的一部分运行) │ └─────────────────────────────────────┘ │ ├─→ 加入集群 ├─→ 参与集群状态 ├─→ 持有数据(可选) ├─→ 执行分布式操作 └─→ 本地执行请求 ``` **特点:** - 作为集群节点运行 - 可以持有数据(如果配置了 data 角色) - 可以成为主节点(如果配置了 master 角色) - 请求可以在本地执行,减少网络开销 - 了解集群状态 **适用场景:** - 应用服务器与 Easysearch 部署在同一主机 - 需要低延迟的本地访问 - 长期运行的连接 ### 2. Transport Client(传输客户端) 传输客户端通过传输协议连接到远程集群: ``` ┌─────────────────────────────────────┐ │ Transport Client │ │ (连接到远程集群,不作为节点) │ └─────────────────────────────────────┘ │ ├─→ 不加入集群 ├─→ 不持有数据 ├─→ 不参与主节点选举 └─→ 通过网络转发所有请求 ``` **特点:** - 不作为集群节点运行 - 不持有数据 - 不参与主节点选举 - 所有请求通过网络发送到集群节点 - 轻量级连接 **适用场景:** - 应用程序与 Easysearch 分离部署 - 短期连接或批量处理任务 - 多个应用需要连接同一集群 - 需要灵活添加/移除客户端 ## 使用示例 ```yaml # 默认配置(节点客户端) client.type: node # 使用传输客户端 client.type: transport # 配置传输客户端连接地址 cluster.name: my-cluster discovery.seed_hosts: ["192.168.1.10:9300", "192.168.1.11:9300"] ``` ## 推荐设置建议 **现代应用建议**:使用 HTTP REST API 而非 Transport Client **使用 Node Client:** - 应用与 Easysearch 同机部署 - 需要极低延迟 - 长期运行的专用客户端 **使用 Transport Client:** - 传统应用集成 - 需要二进制协议性能 - 与 HTTP REST API 相比有特殊需求 ## 对比分析 | 特性 | Node Client | Transport Client | HTTP REST API | |-----|-------------|------------------|--------------| | 资源消耗 | 高 | 中 | 低 | | 网络开销 | 低(本地执行) | 中 | 中 | | 部署灵活性 | 低 | 中 | 高 | | 版本兼容性 | 需版本一致 | 需版本一致 | 相对宽松 | | 安全性 | 需要证书配置 | 需要证书配置 | 标准 HTTP 认证 | | 推荐场景 | 同机部署 | 传统应用 | 现代应用 | ## 代码示例 **Java Transport Client 示例:** ```java // 创建传输客户端(已弃用,仅供参考) Settings settings = Settings.builder() .put("cluster.name", "my-cluster") .put("client.type", "transport") .build(); TransportClient client = new PreBuiltTransportClient(settings) .addTransportAddress( new InetSocketTransportAddress( InetAddress.getByName("localhost"), 9300 ) ); ``` **推荐:使用 REST High Level Client:** ```java // 现代 REST 客户端(推荐) RestHighLevelClient client = new RestHighLevelClient( RestClient.builder( new HttpHost("localhost", 9200, "http") ) ); ``` ## 弃用说明 **Transport Client 已弃用** 从 Easysearch 7.x 开始,Transport Client 被标记为弃用。推荐使用: 1. **Java REST High Level Client**:基于 HTTP,更易用 2. **Java API Client**:新一代客户端,类型安全 **迁移建议:** ``` Transport Client → REST High Level Client / Java API Client ``` ## 相关配置项 | 配置项 | 作用 | 默认值 | |-------|------|-------| | `cluster.name` | 集群名称 | - | | `discovery.seed_hosts` | 发现种子节点地址 | - | | `client.transport.sniff` | 是否嗅探其他节点 | false | ## 注意事项 1. **静态配置**:修改此配置需要重启节点 2. **版本兼容性**:Transport Client 需要与集群版本匹配 3. **弃用警告**:Transport Client 已弃用,新项目建议使用 REST API 4. **网络配置**:使用 Transport Client 需要开放传输端口(默认 9300) 5. **安全认证**:确保配置正确的安全认证信息