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

配置项作用 #

client.type 配置项指定 Easysearch 客户端的类型,决定客户端与集群的连接方式和行为模式。

配置项类型 #

该配置项为静态配置,需要在启动时设置,修改后需要重启节点才能生效。

默认值 #

node

是否必需 #

可选配置项

配置值说明 #

说明
node节点客户端(默认)
transport传输客户端

客户端类型详解 #

1. Node Client(节点客户端) #

节点客户端是默认的客户端类型,具有以下特点:

┌─────────────────────────────────────┐
│         Node Client                 │
│  (作为集群的一部分运行)               │
└─────────────────────────────────────┘
            │
            ├─→ 加入集群
            ├─→ 参与集群状态
            ├─→ 持有数据(可选)
            ├─→ 执行分布式操作
            └─→ 本地执行请求

特点:

  • 作为集群节点运行
  • 可以持有数据(如果配置了 data 角色)
  • 可以成为主节点(如果配置了 master 角色)
  • 请求可以在本地执行,减少网络开销
  • 了解集群状态

适用场景:

  • 应用服务器与 Easysearch 部署在同一主机
  • 需要低延迟的本地访问
  • 长期运行的连接

2. Transport Client(传输客户端) #

传输客户端通过传输协议连接到远程集群:

┌─────────────────────────────────────┐
│      Transport Client               │
│   (连接到远程集群,不作为节点)         │
└─────────────────────────────────────┘
            │
            ├─→ 不加入集群
            ├─→ 不持有数据
            ├─→ 不参与主节点选举
            └─→ 通过网络转发所有请求

特点:

  • 不作为集群节点运行
  • 不持有数据
  • 不参与主节点选举
  • 所有请求通过网络发送到集群节点
  • 轻量级连接

适用场景:

  • 应用程序与 Easysearch 分离部署
  • 短期连接或批量处理任务
  • 多个应用需要连接同一集群
  • 需要灵活添加/移除客户端

使用示例 #

# 默认配置(节点客户端)
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 ClientTransport ClientHTTP REST API
资源消耗
网络开销低(本地执行)
部署灵活性
版本兼容性需版本一致需版本一致相对宽松
安全性需要证书配置需要证书配置标准 HTTP 认证
推荐场景同机部署传统应用现代应用

代码示例 #

Java Transport Client 示例:

// 创建传输客户端(已弃用,仅供参考)
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:

// 现代 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. 安全认证:确保配置正确的安全认证信息