首页 文章 精选 留言 我的

精选列表

搜索[rpm包],共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集群上。 下一期,我们将带领大家完成简单的实操演示。

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

lamp-cloud 3.4.0 发布,依赖包发布至官方中央仓库

3.4.0版本更新详情: build 依赖 guava.version > 30.1.1-jre lamp-util 项目的 com.tangyh.basic 包修改为 top.tangyh.basic lamp-boot 项目的 com.tangyh.lamp 包修改为 top.tangyh.lamp lamp-cloud 项目的 com.tangyh.lamp 包修改为 top.tangyh.lamp feat: 新增 使用自己的域名作为groupId, 并将lamp-util发布到 maven 官方中央仓库,方便开发者快速上手 refactor: 优化 修复代码生成器生成的分页列表页面直接回显枚举、字典等字段 fix: 修复 修复代码生成器生成的新增/编译页面赋值逻辑覆盖默认值的问题 lamp-boot项目错误的依赖了lamp-cloud项目的api模块 《灯灯》中后台快速开发平台 lamp 项目组成 1) 工具集 (lamp-util 项目必备,其他2个可选) 项目 gitee github 备注 工具集 lamp-util lamp-util 业务无关的工具集,cloud和boot 项目都依赖它 代码生成器 lamp-generator lamp-generator 给开发人员使用 定时调度器 lamp-job lamp-job 尚未开发 2) 后端 (下面2个项目功能一致,任选其一即可) 项目 gitee github 备注 微服务版 lamp-cloud lamp-cloud SpringCloud 版 单体版 lamp-boot lamp-boot SpringBoot 版(和lamp-cloud功能基本一致) 示例项目 lamp-samples lamp-samples 微服务版的示例功能 3)前端 (下面3个项目功能一致,任选其一即可) 项目 gitee github 备注 租户后台 lamp-web lamp-web 基于vue-admin-element开发 (vue2.x) 租户后台 lamp-web-beautiful lamp-web-beautiful 基于vue-admin-beautiful开发 (vue2.x) 租户后台 (强烈推荐!👏👏👏) lamp-web-plus lamp-web-plus 基于vue-vben-admin开发 (vue3.x) 如果你非要说lamp是Linux+Apache+MySQL+PHP,那就算是吧,毕竟PHP是世界上最好的语言,我也希望此项目成为世界上最好的后台框架!😈😈😈 lamp-cloud 简介 lamp-cloud的前身是zuihou-admin-cloud,从3.0.0版本开始,改名为lamp-cloud,它是lamp项目的其中一员。 lamp-cloud基于 jdk11/jdk8+SpringCloud(2020.0.3)+ SpringCloudAlibaba(2021.1)+SpringBoot(2.5.3)的微服务快速开发平台,其中的可配置的SaaS功能尤其闪耀, 具备RBAC功能、网关统一鉴权、Xss防跨站攻击、自动代码生成、多种存储系统、分布式事务、分布式定时任务等多个模块,支持多业务系统并行开发, 支持多服务并行开发,可以作为后端服务的开发脚手架。代码简洁,注释齐全,架构清晰,非常适合学习和企业作为基础框架使用。 核心技术采用Spring Cloud Alibaba、SpringBoot、Mybatis、Seata、Sentinel、RabbitMQ、FastDFS/MinIO、SkyWalking等主要框架和中间件。 希望能努力打造一套从JavaWeb基础框架-分布式微服务架构-持续集成-系统监测的解决方案。本项目旨在实现基础能力,不涉及具体业务。 lamp 租户模式介绍 本项目可以通过配置,轻松切换项目的多租户实现方式。 租户模式 描述 优点 缺点 NONE(非租户模式) 没有租户 简单、适合独立系统 缺少租户系统的优点 COLUMN(字段模式) 租户共用一个数据库,在业务表中增加字段来区分 简单、不复杂、开发无感知 数据隔离性差、安全性差、数据备份和恢复困难、 SCHEMA(独立数据库) 每个租户独立一个 数据库(schema),执行sql时,动态在表名前增加schema 简单、开发无感知、数据隔离性好 配置文件中必须配置数据库的root账号、不支持复杂sql和 sql嵌套自定义函数 DATASOURCE(独立数据源) 每个租户独立一个数据源,执行代码时,动态切换数据源 可独立部署数据库,数据隔离性好、扩展性高、故障影响小 相对复杂、开发需要注意切换数据源时的事务问题、需要较多的数据库 SCHEMA_COLUMN(独立数据库+字段模式) 每个租户独立一个 数据库,执行代码时,先动态切换数据源,在动态拼接 子租户id进行二次隔离 简单、开发无感知、数据隔离性好、支持大租户小门店形式 配置文件中必须配置数据库的root账号、不支持复杂sql和 sql嵌套自定义函数 DATASOURCE_COLUMN(独立数据源+字段模式) 每个租户独立一个 数据库(数据源),执行代码时,动态切换数据源,在动态拼接 子租户id 二次隔离 可独立部署数据库,数据隔离性好、扩展性高、故障影响小、支持大租户小门店形式 相对复杂、开发需要注意切换数据源时的事务问题、需要较多的数据库 lamp 项目演示地址 后端使用lamp-cloud-plus,前端使用lamp-web-plus。演示地址: https://tangyh.top 后端使用lamp-cloud-plus,前端使用lamp-web。演示地址: https://tangyh.top/lamp-web 后端使用lamp-boot-plus, 前端使用lamp-web-plus。演示地址: https://boot.tangyh.top 后端使用lamp-boot-plus, 前端使用lamp-web。演示地址: https://boot.tangyh.top/lamp-web 演示地址账号: 平台管理员: lamp_pt/lamp (内置给公司内部运营人员使用) 超级管理员: lamp/lamp 普通管理员: general/lamp 普通账号: normal/lamp ps: 演示环境中内置租户没有写入权限,若要在演示环境测试增删改,请使用lamp_pt账号查询租户管理员账号后,登录新租户测试 lamp-cloud 项目亮点功能介绍: 服务鉴权: 通过JWT的方式来加强服务之间调度的权限验证,保证内部服务的安全性。 监控: 利用Spring Boot Admin 来监控各个独立Service的运行状态;利用turbine来实时查看接口的运行状态和调用频率;通过Zipkin来查看各个服务之间的调用链等。 链路调用监控: 同时实现了Zipkin和SkyWalking作为本项目的全链路性能监控, 从整体维度到局部维度展示各项指标,将跨应用的所有调用链性能信息集中展现,可方便度量整体和局部性能,并且方便找到故障产生的源头,生产上可极大缩短故障排除时间。 数据权限 利用基于Mybatis的DataScopeInnerInterceptor拦截器实现了数据权限功能 SaaS(多租户)的无感解决方案 本项目支持6种常见的租户解决方案和无租户方案,同一套代码,修改一个配置即可实现租户模式只有切换。 缓存抽象 采用CacheOps操作缓存,内置2种实现:Caffeine、 Redis,可以让项目应急时在无Redis环境正常运行 优雅的Bean转换 采用Dozer、BeanUtil等组件来对 DTO、DO、PO等对象的优化转换 前后端统一表单验证 严谨的表单验证通常需要 前端+后端同时验证, 但传统的项目,均只能前后端各做一次检验, 后期规则变更,又得前后端同时修改。 故在hibernate-validator的基础上封装了lamp-validator-starter起步依赖,提供一个通用接口,可以获取需要校验表单的规则,然后前端使用后端返回的规则, 以后若规则改变,只需要后端修改即可。 防跨站脚本攻击(XSS) 通过过滤器对所有请求中的 表单参数 进行过滤 通过Json反序列化器实现对所有 application/json 类型的参数 进行过滤 当前登录用户信息注入器 通过注解实现用户身份注入 在线文档 由于原生swagger-ui某些功能支持不够友好,故采用了国内开源的knife4j,并制作了stater,方便springboot用户使用。 代码生成器 基于Mybatis-plus-generator自定义了一套代码生成器, 通过配置数据库字段的注释,自动生成枚举类、数据字典注解、SaveDTO、UpdateDTO、表单验证规则注解、Swagger注解等。 定时任务调度器: 基于xxl-jobs进行了功能增强。(如:指定时间发送任务、执行器和调度器合并项目、多数据源) 大文件/断点/分片续传 前端采用webupload.js、后端采用NIO实现了大文件断点分片续传,启动Eureka、Zuul、File服务后,直接打开docs/chunkUploadDemo/demo.html即可进行测试。 经测试,本地限制堆栈最大内存128M启动File服务,5分钟内能成功上传4.6G+的大文件,正式服耗时则会受到用户带宽和服务器带宽的影响,时间比较长。 分布式事务 集成了阿里的分布式事务中间件:seata,以高效并且对业务0侵入的方式,解决 微服务 场景下面临的分布式事务问题。 跨表、跨库、跨服务的关联数据自动注入器 用于解决跨表、跨库、跨服务分页数据的属性或单个对象的属性 回显关联数据之痛, 支持对静态数据属性(数据字典)、动态主键数据进行自动注入。 灰度发布 为了解决频繁的服务更新上线,版本回退,快速迭代,公司内部协同开发,本项目采用修改ribbon的负载均衡策略来实现来灰度发布。 lamp-cloud 技术栈/版本介绍: 所涉及的相关的技术有: JSON序列化:Jackson 消息队列:RabbitMQ 缓存:Redis 数据库: MySQL 5.7.9 或者 MySQL 8.0.19 定时器:采用xxl-jobs项目进行二次改造 前端:vue + element-ui 持久层框架: Mybatis-plus 代码生成器:基于Mybatis-plus-generator自定义 API网关:Gateway/zuul 服务注册&发现和配置中心: Nacos 服务消费:OpenFeign 负载均衡:Ribbon 服务熔断:Hystrix 项目构建:Maven 分布式事务: seata 分布式系统的流量防卫兵: Sentinel 监控: spring-boot-admin 链路调用跟踪: zipkin/SkyWalking 文件服务器:FastDFS 5.0.5/阿里云OSS/本地存储/MinIO Nginx 部署方面: 服务器:CentOS Jenkins Docker Kubernetes 项目截图: 预览 预览

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

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

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

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

K-Lite Codec Pack Full 15.4.8 现已发布。K-Lite Codec Pack是 DirectShow 过滤器、VFW/ACM 编解码器和工具的集合。编解码器和 DirectShow 过滤器用于音频和视频格式的编码和解码。K-Lite Codec Pack 是一种用户友好的解决方案,用于播放所有的音频和视频文件,使用 K-Lite Codec Pack,能够播放所有流行的音频和视频格式,甚至一些较不常见的格式。 变更日志: 将 MPC-HC 更新到 1.9.2.33 版 将 LAV 筛选器更新为版本 0.74.1-34-g1ceac 将 MPC Video Renderer 更新到版本 0.4.6.1285 将 MediaInfo Lite 更新到版本 20.03 将编解码器调整工具更新为版本6.4.6 MPC-HC 现在具有 AB 重复功能,用户可以使用 [and] 键进行控制。 注意:使用 OpenSubtitles 在 MPC-HC 中搜索字幕目前需要登录。因为现在有很多人呆在家里,他们的服务器正超载,所以 OpenSubtitles 实施了此限制。用户可以在opensubtitles.org网站上创建一个免费帐户。然后,可以在此处使用以下登录详细信息:MPC-HC options > Subtitles > Misc > right-click on OpenSubtitles > Setup ​​​​ 更新说明:http://www.codecguide.com/klcp_update.htm

资源下载

更多资源
Mario

Mario

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

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

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

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册