首页 文章 精选 留言 我的

精选列表

搜索[共享带宽包],共10000篇文章
优秀的个人博客,低调大师

云端技能包 | 百亿级日志之云原生实时流实战(2)

上一期内容中,我们简单为大家介绍了fluentd、docker和日志采集器的架构。现在,我们开始实操。 【 SpotMax 解决方案充分利用了云原生特性,基于微服务架构,可在保障用户服务稳定的同时充分利用Spot实例,实现云端降本增效。戳链接了解SpotMax】 首先来看一下dockerfile,我们可以去fluentd的官网上(docs.fluentd.org)获取基础镜像: 然后我们可以通过run加上一些命令,对容器做初始化: 有了docker file,我们就可以通过docker build,来创建一个镜像。-t后面是镜像名称,冒号:后面是一个版本: 创建完镜像之后,我们可以通过docker image,获取镜像列表: 我们也可以把镜像推到远程docker hub里。Docker hub是官网的远程管理功能,可以免费注册: 我们通过docker login登录之后,再通过docker push就可以把镜像推送到远程了: 现在已经有了一个镜像,我们来run一个container。 首先,跑一个临时的容器。--rm代表运行临时容器,--network host代表用一个host的网络连接模式;-v代表把本地的一个目录,挂载到容器上的目录;最后面跟的是一个命令,指的是fluentd的client端的配置,server端同理: 我们来看一下client端的配置写了些什么: source代表来源; @type后面是插件名称(tail) Path后面是我们要去读的本地日志,以及相应的pos_file、日志tag(这里取名为test) 接下来,我们match tag,就可以利用forward(output插件),通过tcp、udp的方式打到另外一个服务集群。 现在,我们再来看一下fluentd的server端配置: 通过forward插件,我们可以监听24224端口,拿到日志流,再通过match tag (即前面的test),用stdoutput直接输出,我们也可以把它打到kafka,或者运行自己的插件等。 现在来运行一下看看效果: 首先我们跑一下fluentd的server端,可以看到已经在监听了: 再看看fluentd的client端,如图,可以看到它现在已经在读容器里面的一个日志文件: 由于这个容器的目录,已经绑定在宿主机的一个目录上,我们可以通过下图中标示出的这条命令(每秒钟打一个just for fun),往日志中打一些消息: 可以看到,server端已经能够正常接收到消息(just for fun): 我们整个演示都是跑在docker容器上的,我们可以通过docker ps去看容器的列表:如图所示,已经起了两个容器,我们可以用docker kill,去kill一个容器: 未来的节目中,我们将会介绍怎么样把日志采集器部署到k8s上面去,下次我们再见。

优秀的个人博客,低调大师

云端技能包 | 百亿级日志之云原生实时流实战(1)

随着云原生技术的快速发展,微服务架构、容器及 Kubernetes 等技术的不断迭代,对于海量日志的管理提出了更高的要求,包括容器内磁盘是否持久化、HPA 时如何保证数据不丢失、海量日志如何进行可靠的传输、微服务数量达到一定规模时日志该如何管理、如何了解不同云商的收费策略以最大化节省成本,等等。 【云资源优化服务 SpotMax 充分利用云原生特性,基于微服务架构,可在保障用户服务稳定的同时充分利用Spot实例,实现云端降本增效。戳链接了解SpotMax】 “云原生日志流实战”将会通过实操加讲解的方式,和大家一起探讨在云背景下收集海日志的架构及实现细节。接下来为大家展示的这套架构,目前已经经过实践检验,稳定支撑了线上每日百亿至千级别的日志的收集。我们将一步步带领大家动手完成一个部署在k8s集群的日志采集器。 fluentd与Docker 市场上常用的开源日志采集工具一般有logstash、FLUME、 fluentd。其中FLUME、 fluentd的设计理念比较相像。fluentd是基于C + Ruby的一套开源工具,FLUME是分布式的、可靠、可用的Apache项目,但是相对 fluentd来说,配置较为复杂。本次课程我们主要使用的是较为轻量级的开源工具fluentd。 fluentd配置简单,对日志的预处理也非常简单方便。我们来看一下fluentd官网的document(docs.fluentd.org): 首先来看input、output插件。使用input插件,我们可以从本地、或者通过tcp、udp流获取到日志,然后我们会给每一个日志打tag,后面通过match 该tag可以做进一步的处理:如过滤、格式化等。最终我们可以通过Output插件完成落地。 例如落到本地文件,或者存到亚马逊的s3,或打到kafka,等等。 左侧菜单栏中可见container deployment,其中有docker image——这就是docker的一个基础镜像。我们在后面的实操中会从这里获取到基础镜像,来生成一个容器。 简单介绍一下Docker的特性:docker采用的是沙盒机制,即每个运行的程序是做资源隔离的,不同程序之间不会互相影响。 如下图所示,docker采用了一种远程管理方式。这里有两个概念:image镜像、container容器,他们的关系就像一个类和对象的关系一样,一个image可以生成多个container。 我们可以通过dockerbuild的方式来build一个镜像,可以通过docker pull/push的方式,以及dockerhub(类似github)做一个远程的提交,也可以用docker run指定一个镜像,运行一个容器。 日志采集器架构 首先,我们看一下采集器的简单架构,假设我们有一个http的服务,产生了一个日志。一般的情况下,我们会在本地部署一个crontab做一个定时任务的压缩上传,也可能会把它打到一个实时的kafka队列。 一般情况下这么处理,是没有问题的,但假如我们的服务性能足够好,产生了大量的日志,会发生什么? 如下是CPU的负载图:我们看到每小时都有一个尖峰,因为每小时我们做一个压缩,上传的时候会占一定的CPU,因此非常不利于抗流量服务,做hpa(自动伸缩)。此外,处理日志的程序,跟业务机耦合在一起,也会占一定的资源。 那么,怎么解决这个问题? 假如我们面对的是海量日志,对数据的一致性要求没有那么高,我们就会想到:能不能先把日志通过实时的方式传到另外一个集群,由该集群做支持处理? 因此,我们演化出这样的一个架构: 可以看到,该架构中多了一个日志聚合层的集群。我们可以在抗流量服务机器上部署fluentd的client端,在聚合层部署fluentd的server端。这样,我们就可以把日志通过TCP、UDP实时传输到日志聚合层,由聚合层做一个处理。 因此,我们要带领大家完成的,就是如何把日志聚合层,打包成一个产品,最终部署到k8s集群上。 下一期,我们将带领大家完成简单的实操演示。

优秀的个人博客,低调大师

K-Lite Codec Pack Full 15.7.0 发布,视频解码器包

K-Lite Codec Pack Full 15.6.5 现已发布。K-Lite Codec Pack是 DirectShow 过滤器、VFW/ACM 编解码器和工具的集合。编解码器和 DirectShow 过滤器用于音频和视频格式的编码和解码。K-Lite Codec Pack 是一种用户友好的解决方案,用于播放所有的音频和视频文件,使用 K-Lite Codec Pack,能够播放所有流行的音频和视频格式,甚至一些较不常见的格式。 变更日志: 将 MPC-HC 更新到 1.9.7.34 版本 将 LAV Filters更新为版本 0.74.1-71-gcb503 将 MPC Video Renderer 更新到版本 0.4.8.1457 将编解码器调整工具更新为版本 6.5.0 将 MediaInfo Lite 更新到版本 20.08 更新说明:http://www.codecguide.com/klcp_update.htm

优秀的个人博客,低调大师

【最佳实践】Elasticsearch Java Rest Client快速上手(附完整示例代码包)

本文介绍Elasticsearch的Java Client的原理、版本兼容性以及使用示例,帮助您快速使用Java客户端与Elasticsearch集群进行交互,完成检索、分析等相关业务。 Transport Client迁移至REST Client Transport Client随着Elasticsearch的第一个版本诞生,是一个特别的客户端。特别之处在于,它使用TCP协议与Elasticsearch通信,这也造成了当客户端与不同版本的Elasticsearch通信时,会存在兼容性问题。详情请参见Motivations around a new Java client。 Elasticsearch官网于2016年发布Low Level REST客户端,该客户端基于Apache HTTP客户端,允许通过HTTP协议与任何版本的Elasticsearch集群通信。在Low Level REST客户端的基础上,Elasticsearch发布了High Level REST Client。 Elasticsearch 7.0中已经弃用Transport Client,在8.0中完全移除它。因此在实际开发中建议您使用Java REST Client。Rest Client通过HTTP请求,帮助您处理请求和返回的序列化问题,为您的业务开发带来便捷。 Java REST客户端 Java REST客户端有两种类型: Java Low Level REST Client:Elasticsearch Client低级别客户端。它允许通过HTTP请求与Elasticsearch集群进行通信。API本身不负责数据的编码解码,由用户去编码解码。它与所有的Elasticsearch版本兼容。 Java High Level REST Client(本章节以此为例):Elasticsearch Client官方高级客户端。基于低级客户端,主要目标是为了暴露各API特定的方法。Java High Level REST Client依赖于Elasticsearch核心项目,将Request对象作为参数,返回一个Response对象。所有API都可以同步或异步调用。 同步调用方法立即返回一个Response对象。 而异步调用方法(方法名以async结尾)依赖于监听,当有请求返回或是错误返回时,该监听会通知到对应的方法继续执行。 本文以阿里云Elasticsearch为例,为您讲解Java Client的用法。阿里云Elasticsearch兼容开源Elasticsearch的功能,以及Security、Machine Learning、Graph、APM等商业功能,致力于数据分析、数据搜索等场景服务。支持5.5.3、6.3.2、6.7.0、6.8.0和7.4.0等版本,并提供了商业插件X-Pack服务。在开源Elasticsearch的基础上提供企业级权限管控、安全监控告警、自动报表生成等功能。阿里云Elasticsearch为您提供1个月的免费试用活动,单击此处即可免费试用。 准备工作 安装Java,要求JDK版本为1.8及以上。安装方法请参见安装JDK。 创建阿里云Elasticsearch实例,版本要求大于等于Java High Level REST Client的版本。 创建对应版本的实例,具体操作方法请参见创建阿里云Elasticsearch实例。 High Level Client能够向上兼容,例如7.4.0版本的Java High Level REST Client能确保与大于等于7.4.0版本的Elasticsearch集群通信。为了保证最大程度地使用最新版客户端的特性,推荐High Level Client版本与集群版本一致。 开启阿里云Elasticsearch实例的自动创建索引功能。 具体操作步骤请参见开启自动创建索引。 如果未开启会提示如下报错。 配置阿里云Elasticsearch实例的白名单,确保网络互通。 如果运行Java代码的服务器在公网环境下,可通过阿里云Elasticsearch实例的公网地址进行连通。连通前,需要开启阿里云Elasticsearch实例的公网地址,并修改公网地址访问白名单,将服务器的公网IP地址加入白名单中。具体操作步骤请参见配置ES公网或私网访问白名单。 如果您使用的是WIFI、宽带等网络,需要将公网出口的跳板机IP地址配置进去。建议您通过淘宝IP地址库查询。 您也可以将白名单配置为0.0.0.0/0,允许所有IPv4地址访问阿里云Elasticsearch实例。此配置会导致实例完全暴露在公网中,增加安全风险,配置前请确认您是否可以接受这个风险。 如果运行Java代码的服务器与阿里云Elasticsearch实例在同一专有网络VPC(Virtual Private Cloud)中,可通过阿里云Elasticsearch实例的内网地址进行连通。连通前,需要确保VPC私网访问白名单(默认为0.0.0.0/0)中已添加了服务器的内网IP地址。 创建Java Maven工程,并将pom依赖添加到Java工程的pom.xml文件中。 High Level REST Client(7.x) #### pom依赖 <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.4.0</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.7</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.7</version> </dependency> 示例 单击下载完整示例代码。 以下代码使用Index API创建索引,使用Delete API删除该索引,并演示了在JVM内存分配比较有限的客户端环境中,通过调整ResponseConsumer配置,限制异步响应所占用的缓存的大小。 import org.apache.http.HttpHost; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.CredentialsProvider; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.nio.client.HttpAsyncClientBuilder; import org.elasticsearch.action.delete.DeleteRequest; import org.elasticsearch.action.delete.DeleteResponse; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.client.*; import java.io.IOException; import java.util.HashMap; import java.util.Map; public class RestClientTest74 { private static final RequestOptions COMMON_OPTIONS; static { RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder(); // 默认缓存限制为100MB,此处修改为30MB。 builder.setHttpAsyncResponseConsumerFactory( new HttpAsyncResponseConsumerFactory .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024)); COMMON_OPTIONS = builder.build(); } public static void main(String[] args) { // 阿里云Elasticsearch集群需要basic auth验证。 final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); //访问用户名和密码为您创建阿里云Elasticsearch实例时设置的用户名和密码,也是Kibana控制台的登录用户名和密码。 credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("{访问用户名}", "{访问密码}")); // 通过builder创建rest client,配置http client的HttpClientConfigCallback。 // 单击所创建的Elasticsearch实例ID,在基本信息页面获取公网地址,即为ES集群地址。 RestClientBuilder builder = RestClient.builder(new HttpHost("{ES集群地址}", 9200)) .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() { @Override public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) { return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider); } }); // RestHighLevelClient实例通过REST low-level client builder进行构造。 RestHighLevelClient highClient = new RestHighLevelClient(builder); try { // 创建request。 Map<String, Object> jsonMap = new HashMap<>(); // field_01、field_02为字段名,value_01、value_02为对应的值。 jsonMap.put("{field_01}", "{value_01}"); jsonMap.put("{field_02}", "{value_02}"); //index_name为索引名称;type_name为类型名称,7.0及以上版本必须为_doc;doc_id为文档的id。 IndexRequest indexRequest = new IndexRequest("{index_name}", "_doc", "{doc_id}").source(jsonMap); // 同步执行,并使用自定义RequestOptions(COMMON_OPTIONS)。 IndexResponse indexResponse = highClient.index(indexRequest, COMMON_OPTIONS); long version = indexResponse.getVersion(); System.out.println("Index document successfully! " + version); //index_name为索引名称;type_name为类型名称,7.0及以上版本必须为_doc;doc_id为文档的id。与以上创建索引的名称和id相同。 DeleteRequest request = new DeleteRequest("{index_name}", "_doc", "{doc_id}"); DeleteResponse deleteResponse = highClient.delete(request, COMMON_OPTIONS); System.out.println("Delete document successfully! \n" + deleteResponse.toString() + "\n" + deleteResponse.status()); highClient.close(); } catch (IOException ioException) { // 异常处理。 } } } 以上示例代码中带{}的参数需要替换为您具体业务的参数,详情请参见代码注释。更多Java High Level REST Client的使用特性,请参见Java High Level REST Client官方文档。 High Level REST Client(6.7.x) pom依赖 <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>6.7.0</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.7</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.7</version> </dependency> RequestOptions新特性 相较于6.3.2的REST Client,6.7.0增加了RequestOptions选项。您可以通过它对请求进行更多自定义的配置,且不影响正常的Elasticsearch请求。以下示例将演示在JVM内存分配比较有限的客户端环境中,通过调整ResponseConsumer配置,限制异步响应所占用的缓存的大小。完整示例请参见示例。 private static final RequestOptions COMMON_OPTIONS; static { RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder(); // 默认缓存限制为100MB,此处修改为30MB。 builder.setHttpAsyncResponseConsumerFactory( new HttpAsyncResponseConsumerFactory .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024)); COMMON_OPTIONS = builder.build(); } // 同步执行,并使用自定义的RequestOptions(COMMON_OPTIONS)。 IndexResponse indexResponse = highClient.index(indexRequest, COMMON_OPTIONS); 更多RequestOptions的用法请参见官方文档。 示例 单击下载完整示例代码。以下代码使用Index API创建索引,使用Delete API删除该索引,并演示了在JVM内存分配比较有限的客户端环境中,通过调整ResponseConsumer配置,限制异步响应所占用的缓存的大小。 import org.apache.http.HttpHost; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.CredentialsProvider; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.nio.client.HttpAsyncClientBuilder; import org.elasticsearch.action.delete.DeleteRequest; import org.elasticsearch.action.delete.DeleteResponse; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.client.*; import java.io.IOException; import java.util.HashMap; import java.util.Map; public class RestClientTest67 { private static final RequestOptions COMMON_OPTIONS; static { RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder(); // 默认缓存限制为100MB,此处修改为30MB。 builder.setHttpAsyncResponseConsumerFactory( new HttpAsyncResponseConsumerFactory .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024)); COMMON_OPTIONS = builder.build(); } public static void main(String[] args) { // 阿里云Elasticsearch集群需要basic auth验证。 final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); //访问用户名和密码为您创建阿里云Elasticsearch实例时设置的用户名和密码,也是Kibana控制台的登录用户名和密码。 credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("{访问用户名}", "{访问密码}")); // 通过builder创建rest client,配置http client的HttpClientConfigCallback。 // 单击所创建的Elasticsearch实例ID,在基本信息页面获取公网地址,即为ES集群地址。 RestClientBuilder builder = RestClient.builder(new HttpHost("{ES集群地址}", 9200)) .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() { @Override public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) { return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider); } }); // RestHighLevelClient实例通过REST low-level client builder进行构造。 RestHighLevelClient highClient = new RestHighLevelClient(builder); try { // 创建request。 Map<String, Object> jsonMap = new HashMap<>(); // field_01、field_02为字段名,value_01、value_02为对应的值。 jsonMap.put("{field_01}", "{value_01}"); jsonMap.put("{field_02}", "{value_02}"); //index_name为索引名称;type_name为类型名称;doc_id为文档的id。 IndexRequest indexRequest = new IndexRequest("{index_name}", "{type_name}", "{doc_id}").source(jsonMap); // 同步执行,并使用自定义RequestOptions(COMMON_OPTIONS)。 IndexResponse indexResponse = highClient.index(indexRequest, COMMON_OPTIONS); long version = indexResponse.getVersion(); System.out.println("Index document successfully! " + version); //index_name为索引名称;type_name为类型名称;doc_id为文档的id。与以上创建索引的名称和id相同。 DeleteRequest request = new DeleteRequest("{index_name}", "{type_name}", "{doc_id}"); DeleteResponse deleteResponse = highClient.delete(request, COMMON_OPTIONS); System.out.println("Delete document successfully! \n" + deleteResponse.toString() + "\n" + deleteResponse.status()); highClient.close(); } catch (IOException ioException) { // 异常处理。 } } } 以上示例代码中带{}的参数需要替换为您具体业务的参数,详情请参见代码注释。更多Java High Level REST Client的使用特性,请参见Java High Level REST Client官方文档。 High Level REST Client(6.3.x) pom依赖 <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>6.3.2</version> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>6.3.2</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.7</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.7</version> </dependency> 示例 单击下载完整示例代码。以下示例使用Index API创建索引,然后使用Delete API删除该索引。 import org.apache.http.HttpHost; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.CredentialsProvider; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.nio.client.HttpAsyncClientBuilder; import org.elasticsearch.action.delete.DeleteRequest; import org.elasticsearch.action.delete.DeleteResponse; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestClientBuilder; import org.elasticsearch.client.RestHighLevelClient; import java.io.IOException; import java.util.HashMap; import java.util.Map; public class RestClientTest63 { public static void main(String[] args) { // 阿里云Elasticsearch集群需要basic auth验证。 final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); //访问用户名和密码为您创建阿里云Elasticsearch实例时设置的用户名和密码,也是Kibana控制台的登录用户名和密码。 credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("{访问用户名}", "{访问密码}")); // 通过builder创建rest client,配置http client的HttpClientConfigCallback。 // 单击所创建的Elasticsearch实例ID,在基本信息页面获取公网地址,即为ES集群地址。 RestClientBuilder builder = RestClient.builder(new HttpHost("{ES集群地址}", 9200)) .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() { @Override public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) { return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider); } }); // RestHighLevelClient实例通过REST low-level client builder进行构造。 RestHighLevelClient highClient = new RestHighLevelClient(builder); try { // 创建request。 Map<String, Object> jsonMap = new HashMap<>(); // field_01、field_02为字段名,value_01、value_02为对应的值。 jsonMap.put("{field_01}", "{value_01}"); jsonMap.put("{field_02}", "{value_02}"); //index_name为索引名称;type_name为类型名称;doc_id为文档的id。 IndexRequest indexRequest = new IndexRequest("{index_name}", "{type_name}", "{doc_id}").source(jsonMap); // 同步执行。 IndexResponse indexResponse = highClient.index(indexRequest); long version = indexResponse.getVersion(); System.out.println("Index document successfully! " + version); //index_name为索引名称;type_name为类型名称;doc_id为文档的id。与以上创建索引的名称和id相同。 DeleteRequest request = new DeleteRequest("{index_name}", "{type_name}", "{doc_id}"); DeleteResponse deleteResponse = highClient.delete(request); System.out.println("Delete document successfully!"); highClient.close(); } catch (IOException ioException) { // 异常处理。 } } } 以上示例代码中带{}的参数需要替换为您具体业务的参数,详情请参见代码注释。更多Java High Level REST Client的使用特性,请参见Java High Level REST Client官方文档。 Low Level REST Client (5.x) pom依赖 <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>rest</artifactId> <version>5.5.3</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.7</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.7</version> </dependency> 示例 单击下载完整示例代码。 通过Java REST Client访问阿里云Elasticsearch的9200端口进行测试,示例代码如下。 import org.apache.http.HttpEntity; import org.apache.http.HttpHost; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.CredentialsProvider; import org.apache.http.entity.ContentType; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.nio.client.HttpAsyncClientBuilder; import org.apache.http.nio.entity.NStringEntity; import org.apache.http.util.EntityUtils; import org.elasticsearch.client.Response; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestClientBuilder; import java.io.IOException; import java.util.Collections; public class RestClientTest55 { public static void main(String[]args){ final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("USER NAME", "PASSWORD")); // 单击所创建的Elasticsearch实例ID,在基本信息页面获取公网地址,即为HOST。 RestClient restClient = RestClient.builder(new HttpHost("HOST", 9200)) .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() { @Override public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) { return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider); } }).build(); try { //field_01、field_02为字段名,value_01、value_02为对应的值。 HttpEntity entity = new NStringEntity("{\n\"field_01\" : \"value_01\"\n,\n\"field_02\" : \"value_02\"\n}", ContentType.APPLICATION_JSON); //index_name为索引名称;type_name为类型名称;doc_id为文档的id。 Response indexResponse = restClient.performRequest( "PUT", "/index_name/type_name/doc_id", Collections.<String, String>emptyMap(), entity); //index_name为索引名称;type_name为类型名称;doc_id为文档的id。与以上创建索引的名称和id相同。 Response response = restClient.performRequest("GET", "/index_name/type_name/doc_id", Collections.singletonMap("pretty", "true")); System.out.println(EntityUtils.toString(response.getEntity())); } catch (IOException e) { e.printStackTrace(); } } } USER NAME:替换为访问阿里云Elasticsearch实例的用户名。 PASSWORD:替换为访问阿里云Elasticsearch实例的密码。 HOST:替换为阿里云Elasticsearch实例的内网或外网地址。可在实例的基本信息页面获取,获取方法请参见查看实例的基本信息。 相关活动 更多折扣活动,请访问阿里云 Elasticsearch 官网。 阿里云 Elasticsearch 商业通用版,1核2G ,SSD 20G首月免费阿里云 Logstash 2核4G首月免费

优秀的个人博客,低调大师

K-Lite Codec Pack Full 15.6.3 发布,视频解码器包

K-Lite Codec Pack Full 15.6.3 现已发布。K-Lite Codec Pack是 DirectShow 过滤器、VFW/ACM 编解码器和工具的集合。编解码器和 DirectShow 过滤器用于音频和视频格式的编码和解码。K-Lite Codec Pack 是一种用户友好的解决方案,用于播放所有的音频和视频文件,使用 K-Lite Codec Pack,能够播放所有流行的音频和视频格式,甚至一些较不常见的格式。 变更日志: 将 MPC-HC 更新到1.9.6.31版本 将 MPC Video Renderer 更新到版本 0.4.8.1438 更新说明:http://www.codecguide.com/klcp_update.htm

优秀的个人博客,低调大师

K-Lite Codec Pack Full 15.6.1 发布,视频解码器包

K-Lite Codec Pack Full 15.6.1 现已发布。K-Lite Codec Pack是 DirectShow 过滤器、VFW/ACM 编解码器和工具的集合。编解码器和 DirectShow 过滤器用于音频和视频格式的编码和解码。K-Lite Codec Pack 是一种用户友好的解决方案,用于播放所有的音频和视频文件,使用 K-Lite Codec Pack,能够播放所有流行的音频和视频格式,甚至一些较不常见的格式。 变更日志: 将 MPC-HC 更新到 1.9.6.28 版本 将 LAV Filters 更新到版本 0.74.1-64-g5162c 更新说明:http://www.codecguide.com/klcp_update.htm

优秀的个人博客,低调大师

K-Lite Codec Pack Full 15.5.3 发布,视频解码器包

K-Lite Codec Pack Full 15.5.3 现已发布。K-Lite Codec Pack是 DirectShow 过滤器、VFW/ACM 编解码器和工具的集合。编解码器和 DirectShow 过滤器用于音频和视频格式的编码和解码。K-Lite Codec Pack 是一种用户友好的解决方案,用于播放所有的音频和视频文件,使用 K-Lite Codec Pack,能够播放所有流行的音频和视频格式,甚至一些较不常见的格式。 变更日志: 将 MPC-HC 更新到 1.9.4.29 版本 将 MPC Video Renderer 更新到版本 0.4.6.1343 更新说明:http://www.codecguide.com/klcp_update.htm

优秀的个人博客,低调大师

K-Lite Codec Pack Full 15.5.0 发布,视频解码器包

K-Lite Codec Pack Full 15.5.0 现已发布。K-Lite Codec Pack是 DirectShow 过滤器、VFW/ACM 编解码器和工具的集合。编解码器和 DirectShow 过滤器用于音频和视频格式的编码和解码。K-Lite Codec Pack 是一种用户友好的解决方案,用于播放所有的音频和视频文件,使用 K-Lite Codec Pack,能够播放所有流行的音频和视频格式,甚至一些较不常见的格式。 变更日志: 将 MPC-HC 更新到 1.9.3.5 版本 将 MPC Video Renderer 更新到版本 0.4.6.1292 更新说明:http://www.codecguide.com/klcp_update.htm

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册