1.访问ES的方式

访问es的方式有两种,一种是http方式,还有一种是java客户端方式。

其中Java客户端又分为:
1.1.Node client:

节点客户端实际上是一个集群中的节点(但不保存数据,不能成为主节点)。因为它是一个节点,它知道整个集群状态(所有节点驻留,分片分布在哪些节点,数据在集群中的具体位置等等),这意味着它可以执行 APIs 而且少了一个网络跃点。能够直接转发请求到对应的节点上。

1.2.Transport Client:

传输客户端作为一种轻量级客户端,本身不加入集群,只是简单的发送请求到远端集群中的节点,作为一个集群和应用程序之间的通信层。它知道 API 并能自动帮你在节点之间轮询,帮你嗅探集群等等。但它是集群 外部的 ,和 REST 客户端类似。我们访问的节点负责收集各节点返回的数据(query fetch merge),最后一起返回给客户端。

构造transportClient时候,需要指定sniff是否为true。

if (this.settings.getAsBoolean("client.transport.sniff", false))
{ this.nodesSampler = new SniffNodesSampler(); }
else { this.nodesSampler = new SimpleNodeSampler(); }

这里先提一下:节点通信有5种类型:Recovery Bulk Reg State Ping

网络层  

Elasticsearch 的网络层抽象很值得借鉴。它抽象出一个 Transport 层,同时兼有client和server功能,server端接收其他节点的连接,client维持和其他节点的连接,承担了节点之间请求转发的功能。Elasticsearch 为了避免传输流量比较大的操作堵塞连接,所以会按照优先级创建多个连接,称为channel。

  • recovery: 2个channel专门用做恢复数据。如果为了避免恢复数据时将带宽占满,还可以设置恢复数据时的网络传输速度。

  • bulk: 3个channel用来传输批量请求等基本比较低的请求。

  • regular: 6个channel用来传输通用正常的请求,中等级别。

  • state: 1个channel保留给集群状态相关的操作,比如集群状态变更的传输,高级别。

  • ping: 1个channel专门用来ping,进行故障检测。

(3个节点的集群连接示意,来源 Elasticsearch 官方博客)

每个节点默认都会创建13个到其他节点的连接,并且节点之间是互相连接的,每增加一个节点,该节点会到每个节点创建13个连接,而其他每个节点也会创建13个连回来的连接。

SniffNodesSampler:client会主动发现集群里的其他节点,会创建fully connect(每两个节点间建立5种连接)。这样即使手动添加的机器退服,transportClient还可以向其它集群节点发送请求。另外还支持负载均衡,每次请求都会随机访问一个集群节点。

SimpleNodeSampler:这里创建的都是light connect(简单的ping和查询连接) ,只能在指定的节点间负载均衡,而且如果所有手动添加的机器退服,trnasportClient将无法连接集群进行操作。

注意:在ES7中不建议使用Transport Client,在ES8中去除Transport Client用Java High Level REST Client代替

访问远端集群,尽量以轮询方式访问目标节点

2.如何选择JAVA客户端
如果要将应用程序和 Elasticsearch 集群进行解耦,传输客户端是一个理想的选择。例如,如果您的应用程序需要快速的创建和销毁到集群的连接,传输客户端比节点客户端”轻”,因为它不是一个集群的一部分。类似地,如果您需要创建成千上万的连接,你不想有成千上万节点加入集群。传输客户端( TC )将是一个更好的选择。
另一方面,如果你只需要有少数的、长期持久的对象连接到集群,客户端节点可以更高效,因为它知道集群的布局。但是它会使你的应用程序和集群耦合在一起,所以从防火墙的角度,它可能会构成问题。

与Elasticsearch交互的客户端的更多相关文章

  1. ElasticSearch相关概念与客户端操作

    一.Elasticsearch概述 Elasticsearch是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document).然而它不仅仅是存储,还会索引(i ...

  2. Elasticsearch及java客户端jest使用

    本文使用Github中的Elasticsearch-rtf,已经集成了众多的插件,例如必须使用的中文分词等,可以简单的通过配置来启用中文分词.本文主要分为以下几部分: 1.配置和启用中文分词: 2.定 ...

  3. Elasticsearch Java高级客户端

    1.  概述 Java REST Client 有两种风格: Java Low Level REST Client :用于Elasticsearch的官方低级客户端.它允许通过http与Elastic ...

  4. NEST - Elasticsearch 的高级客户端

    NEST - High level client Version:5.x 英文原文地址:NEST - High level client 个人建议:学习 NEST 的官方文档时,按照顺序进行,不宜跳来 ...

  5. Elasticsearch的java客户端JEST的操作

    准备 把Elasticsearch安装好 安装百度上有很多资料. 导入必要的包 <parent> <groupId>org.springframework.boot</g ...

  6. 使用spark与ElasticSearch交互

    使用 elasticsearch-hadoop 包,可在 github 中搜索到该项目 项目地址 example import org.elasticsearch.spark._ import org ...

  7. PHP如何与搜索引擎Elasticsearch交互?

    一:参考官方文档 1. Elasticsearch 5.4.0英文手册:https://www.elastic.co/guide/en/elasticsearch/reference/5.4/sear ...

  8. ElasticSearch 交互使用

    Curl 命令 # 建立索引 [root@dbtest01 ~]# curl -XPUT 'http://10.0.0.121:9200/test' # 插入数据 [root@dbtest01 ~]# ...

  9. ELK之Elasticsearch

    安装并运行Elasetisearch cd elasticsearch-<version> ./bin/elasticsearch 如果你想把 Elasticsearch 作为一个守护进程 ...

随机推荐

  1. MyBatis学习(四)MyBatis一对一关联查询

    一对一关联查询即.两张表通过外键进行关联.从而达到查询外键直接获得两张表的信息.本文基于业务拓展类的方式实现. 项目骨架 配置文件conf.xml和db.properties前几节讲过.这里就不细说了 ...

  2. 使用iframe内嵌PC网站实现高度自适应

    加个样式 <style> iframe { display: block; border: none; height: 90vh;/*设置高度百分比,一直调到只有一个滚动调为止*/ wid ...

  3. .NET 多条件动态参数查询方法 - SqlSugar ORM

    1.简单多条件多动参数 创建数据库对象 //创建数据库对象 SqlSugarClient SqlSugarClient db = new SqlSugarClient(new ConnectionCo ...

  4. 一个VS主题网站https://studiostyl.es/

    地址: https://studiostyl.es/ 用法: 工具->导入和导出设置->导入选定的环境设置->是,保存我当前的设置->选择下载的主题文件,完成.

  5. 【九度OJ】题目1072:有多少不同的面值组合? 解题报告

    [九度OJ]题目1072:有多少不同的面值组合? 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1072 题目描述: 某人有8角的邮票 ...

  6. 【LeetCode】836. Rectangle Overlap 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/rectangle ...

  7. Adversarial Examples Are Not Bugs, They Are Features

    目录 概 主要内容 符号说明及部分定义 可用特征 稳定可用特征 可用不稳定特征 标准(standard)训练 稳定(robust)训练 分离出稳定数据 分离出不稳定数据 随机选取 选取依赖于 比较重要 ...

  8. Adversarial Examples Improve Image Recognition

    Xie C, Tan M, Gong B, et al. Adversarial Examples Improve Image Recognition.[J]. arXiv: Computer Vis ...

  9. docker简单安装

    docker的安装官网有很直接的教程,直达链接: Ubuntu:https://docs.docker.com/engine/install/ubuntu/ CentOS:https://docs.d ...

  10. 分布式链路追踪自从用了SkyWalking,睡得真香!

    本篇文章介绍链路追踪的另外一种解决方案Skywalking,文章目录如下: 什么是Skywalking? 上一篇文章介绍了分布式链路追踪的一种方式:Spring Cloud Sleuth+ZipKin ...