文档章节

java连接elasticsearch

 张欢19933
发布于 2017/09/01 16:18
字数 1363
阅读 270
收藏 1

码上生花,ECharts 作品展示赛正式启动!>>>

使用 Java API 连接到ElasticSearch集群的方法有两种。

1. 成为ElasticSearch节点

      第一种连接ElasticSearch节点的方式可能会让那些没有接触过ElasticSearch java API的人感到吃惊,即思路是把应用程序当成ElasticSearch集群中的一个节点,并和其他节点一样对待。当然(在绝大多数情况下),我们不希望自己的应用程序被当作数据节点来存储数据,或者被推选为主节点。

我们声明了Client接口、Node接口和NodeBuilder,并用他们来建立到ElasticSearch的连接。下面的代码片段创建了一个到客户端的实例:

Node node = NodeBuilder.nodeBuilder().clusterName(CLUSTERNAME).client(true).node();
Clientclient = node.client();

      我们使用NodeBuilder类创建了一个节点,其中NodeBuilder可根据需要配置并建立节点。集群名称很重要,我们可以通过clusterName( )方法指定它。如果没有提供集群名称,则NodeBuilder会使用默认名称,即(elasticsearch),这时你可能会连接到一个你不希望连接的集群。另一个要点是client()的调用,该方法可以把最终调用的节点指定为客户端节点,而客户端节点不会持有数据。这一点请务必谨慎对待,除非你知道你在做什么,如果忽略了,如果忽略了可能会引发各种奇怪的问题。你的集群可能会丢失部分或者全部的数据。事实上集群可能会把一部分数据迁移到你的电脑上,当你关闭本地的节点实例后,集群会发现一个节点挂了。当可以持有数据的客户端为多个时,索引会更容易丢失。比如说,如果索引没有副本,而部分索引分片又迁移到了你的电脑上,那么关闭客户端肯定会带来集群丢失部分索引。因此,请务必使用client(true),除非你真的知道你在干什么。

      另外需要说明一下local(true)方法。因为它的存在,ElasticSearch可以在当前虚拟机内作为一个独立的节点而存在。这意味着多个ElasticSearch节点可以并存于一个Java虚拟机进程内组成一个集群。这个功能在集成测试时非常好用。有了它我们不需要在其他的地方建立独立的测试节点,并确保了在多个并行测试中互不干扰。

2. 使用传输及连接方式

      本方法允许只连接到集群而不加入集群。你会发现,客户端可以连接到多个节点,并通过轮询调度的方式使用它们。

接下来是使用传输机连接的主要代码:

Settings settings = Settings.settingsBuilder()
    .put("cluster.name", CLUSTERNAME)
    .put("client.transport.sniff", true).build();
client = TransportClient.builder().settings(settings).build()
     .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("host1"), PORT))
     .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("host2"), PORT));

      这个方法很简单。首先我们使用方法settingsBuilder()来建立合适的配置对象,如在本例中只需设置好集群名称。接着我们使用这个配置对象来建立一个TransportClient的客户端对象,然后把连接点的网络地址传递给他。这可以通过TransportClient类的addTransportAddress()方法并传递InetSocketTransportAddress 对象来实现。为创建InetSocketTransportAddress对象,我们需要提供ElasticSearch节点多在机器的IP地址和节点传输层的监听端口号。注意,这里的端口号不是9200,而是9300。9200端口是用来让HTTP REST API来访问ElasticSearch,而9300端口是传输层监听的默认端口。

参数:

client.transport.sniff

true表示让客户端去嗅探整个集群的状态,把集群中其它机器的ip地址加到客户端中,这样做的好处是不用手动设置集群里所有集群的ip到连接客户端,它会自动帮你添加,并且自动发现新加入集群的机器

client.transport.ping_timeout

连接超时时间

client.transport.nodes_sampler_interval

心跳时间

3. 选择合适的连接方式

      目前你已经掌握了通过Java API方式连接ElasticSearch的两种方式:一种是建立客户端节点,一种是使用传输机客户端。到底哪种方式更好呢?一方面来说,第一种方式让启动顺序复杂化了,即客户端节点必须加入集群并建立与其它节点的连接,而这需要时间和资源。然而,操作可以更快地执行,因为所有关于集群、索引、分片的信息都对客户端节点可见。另一方面,使用TransportClient对象启动速度更快,需要的资源更少,如更少的socket连接。然而发送查询和数据却要消耗更多的资源,TransportClient对象对集群和索引的拓扑结构的信息一无所知,所以他无法把数据直接发送到正确的节点,而是先把数据发送给某个初始传输节点,然后由ElasticSearch来完成剩下的转发工作。此外,TransportClient对象还需要你提供一份待转发节点的网络地址列表。

      在选择合适的连接方式时请记住,第一种方式并不是总是可行的。例如,当要连接的ElasticSearch集群处于另一个局域网中,此时唯一可选的方式就是第二种方式。

© 著作权归作者所有

粉丝 48
博文 651
码字总数 371687
作品 0
海淀
私信 提问
加载中
请先登录后再评论。
Elasticsearch:Java 运用示例

在今天的文章中,我们来介绍如何使用Java来访问Elasticsearch。 首先,我们必须在我们的系统中安装Elasticsearch。 Maven 配置 针对Java的开发,我们必须在pom.xml中配置相应的Elasticsearch...

osc_0eecv9o0
2019/12/23
10
0
Centos6搭建elk系统,监控IIS日志

**所需程序: 服务器端:java、elasticsearch、kikbana 客 户 端:IIS、logstash** 一、服务器端(192.168.10.46)操作: 先建立一个ELK专门的目录: [root@Cent65 ~]mkdir /elk/ 上传到elk...

D杀手D
2018/04/24
0
0
ElasticSearch入门 :Windows下安装ElasticSearch

这是ElasticSearch 2.4 版本系列的第一篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 ElasticSearch入门 第三篇:索引 ElasticSearch入门...

osc_wiag8a8b
2018/05/18
13
0
Elasticsearch 6.4基本操作 - Java版

Elasticsearch Java API有四类client连接方式 TransportClient RestClient Jest Spring Data Elasticsearch 其中TransportClient和RestClient是Elasticsearch原生的api。TransportClient可以......

osc_5512k200
2018/11/21
32
0
Elastic Stack 笔记(八)Elasticsearch5.6 Java API

博客地址:http://www.moonxy.com 一、前言 Elasticsearch 底层依赖于 Lucene 库,而 Lucene 库完全是 Java 编写的,前面的文章都是发送的 RESTful API 请求,其实这些请求最后还是通过 Java...

osc_t1c07j7r
2018/06/13
20
0

没有更多内容

加载失败,请刷新页面

加载更多

Http和Nginx反代至Tomcat(LNMT、LAMT)

Http和Nginx反代至Tomcat(LNMT、LAMT) ================================================================================ 概述: 本章将主要介绍Http和Nginx反代至Tomcat,具体内容如下......

osc_facwbzof
37分钟前
17
0
mysql备份之mysqldump工具

参考文档: 利用mysqldump+二进制日志实现备份恢复数据库:http://www.178linux.com/60616 mysql进阶篇(三种备份方法总结:lvm, mysqldump, xtrabackup):http://www.178linux.com/9781 注意...

osc_ur9mmbck
39分钟前
25
0
实战nginx前端反代MogfileFS及负载均衡

实战nginx前端反代mogfilefs及负载均衡 =============================================================================== 实验描述: 使用Nginx代理请求至tackers,实现通过键就可以访问到...

osc_jvzgahav
40分钟前
9
0
Xshell远程操作liunx图形化桌面(xmanager,远程桌面)

必要条件: 1、安装全套的xmanager程序 2、Linux系统安装了图像界面 ~]# yum grouplist    # 查看可安装的桌面组件~]# yum groupinstall "组件名" 3、在shell远程连接主机的属性里...

osc_a45vpoh4
41分钟前
11
0
zabbix基础配置(二)

zabbix基础配置(二) ============================================================================= 概述: 本章我们将继续介绍zabbix的基础配置,具体内容如下: zabbix-agent的安装、...

osc_7bkuddw5
42分钟前
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部