文档章节

java连接elasticsearch

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

使用 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集群处于另一个局域网中,此时唯一可选的方式就是第二种方式。

© 著作权归作者所有

共有 人打赏支持
粉丝 32
博文 455
码字总数 225586
作品 0
海淀
Centos6搭建elk系统,监控IIS日志

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

D杀手D
04/24
0
0
Grafana、elasticsearch、kafka、logstash和pinpoint结合

一、Grafana 1)下载安装 wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-4.2.0-1.x8664.rpm sudo yum localinstall grafana-4.2.0-1.x86_64.rpm 2)启动 serv......

半船水
2017/10/25
0
0
ELK 实验(二)安装Elastic Search 单节点

Linux 安装 java -version echo $JAVA_HOME 木有返回,环境没有设置好。。。 vi /etc/profile export JAVAHOME=/usr/java/jdk1.8.0162 export JREHOME=$JAVAHOME/jre export CLASSPATH=$JAV......

pcdog
04/15
0
0
centos 7 安装 elasticsearch-6.2.4

安装ES mkdir /data/software/ tar xvf elasticsearch-6.2.4.tar.gz -C /data/software/ cd /data/software/ ln -sv elasticsearch-6.2.4/ elasticsearch 或者 rpm -ivh elasticsearch-6.2.4......

会说话的鱼
07/04
0
0
Centos7单机部署ELK+x-pack

ELK分布式框架作为现在大数据时代分析日志的常为大家使用。现在我们就记录下单机Centos7部署ELK的过程和遇到的问题。   系统要求:Centos7(内核3.5及以上,2核4G)   elk版本:6.4.2(较...

DearMyLove
08/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何通过 J2Cache 实现分布式 session 存储

做 Java Web 开发的人多数都会需要使用到 session (会话),我们使用 session 来保存一些需要在两个不同的请求之间共享数据。一般 Java 的 Web 容器像 Tomcat、Resin、Jetty 等等,它们会在...

红薯
今天
3
0
C++ std::thread

C++11提供了std::thread类来表示一个多线程对象。 1,首先介绍一下std::this_thread命名空间: (1)std::this_thread::get_id():返回当前线程id (2)std::this_thread::yield():用户接口...

yepanl
今天
3
0
Nignx缓存文件与动态文件自动均衡的配置

下面这段nginx的配置脚本的作用是,自动判断是否存在缓存文件,如果有优先输出缓存文件,不经过php,如果没有,则回到php去处理,同时生成缓存文件。 PHP框架是ThinkPHP,最后一个rewrite有关...

swingcoder
今天
2
0
20180920 usermod命令与用户密码管理

命令 usermod usermod 命令的选项和 useradd 差不多。 一个用户可以属于多个组,但是gid只有一个;除了gid,其他的组(groups)叫做扩展组。 usermod -u 1010 username # 更改用户idusermod ...

野雪球
今天
3
0
Java网络编程基础

1. 简单了解网络通信协议TCP/IP网络模型相关名词 应用层(HTTP,FTP,DNS等) 传输层(TCP,UDP) 网络层(IP,ICMP等) 链路层(驱动程序,接口等) 链路层:用于定义物理传输通道,通常是对...

江左煤郎
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部