
社区日报 第544期 (2019-03-04)
http://t.cn/RzHyZ7Z
2.elasticsearch 自定义排序插件
http://t.cn/EIJ6lum
3.使用ES对中文文章进行分词,并进行词频统计排序
http://t.cn/EIJXv2K
编辑:cyberdak
归档:https://elasticsearch.cn/article/6500
订阅:https://tinyletter.com/elastic-daily
http://t.cn/RzHyZ7Z
2.elasticsearch 自定义排序插件
http://t.cn/EIJ6lum
3.使用ES对中文文章进行分词,并进行词频统计排序
http://t.cn/EIJXv2K
编辑:cyberdak
归档:https://elasticsearch.cn/article/6500
订阅:https://tinyletter.com/elastic-daily 收起阅读 »

【北京活动】OpenResty x Open Talk 丨北京站
一、活动介绍
OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。目前 OpenResty 是全球占有率排名第五的 Web 服务器,超过 1 万多家商业公司都在使用 OpenResty,包括又拍云、腾讯、奇虎360、京东、12306、Kong 等公司,应用在 CDN、广告系统、搜索、实现业务逻辑、余票查询、网关、ingress controller 等各种不同的场景下。
为促进 OpenResty 在技术圈的发展,增进 OpenResty 使用者的交流与学习,OpenResty 社区联合又拍云,举办 “OpenResty × Open Talk” 全国巡回沙龙,邀请业内资深的 OpenResty 技术专家,分享 OpenResty 实战经验,推动 OpenResty 开源项目的发展,促进互联网技术的教育。
二、报名地址
http://www.huodongxing.com/event/2481310558700
三、活动时间
2019 年 03 月 23 日(周六)
四、活动地址
北京市海淀区中关村大街 11 号E世界财富中心 A 座 B2 PEOPLE²
五、嘉宾与议题
分享嘉宾一:叶靖 / 又拍云平台开发部负责人
目前主要负责又拍云弹性云处理平台以及内部私有云的设计和开发工作,兼部分文件上传接口相关的工作。对 Python / Lua / Go 等语言有较深入的研究,在 ngx_lua 和 OpenResty 模块开发方面有丰富经验,专注于高并发、高可用服务架构设计,对 Docker 容器有较多的实践。平时热衷于参与开源社区分享开源经验。
分享话题:《 OpenResty 在又拍云容器平台中的应用 》
主要介绍 Kong、Ingress-Nginx 等基于 OpenResty 实现的 API 网关和负载均衡器的使用方法和工作原理,以及如何基于 OpenResty 实现高性能的外部负载网关。
分享嘉宾二:王辉 / 新浪微博产品部移动高级开发工程师
专注新浪微博后端业务,微博移动应用后端网关负责人,曾负责过视频直播、消息下推等系统。
分享话题:《 OpenResty 构建一站式应用网关实践 》
新浪微博基于 OpenResty 构建了一个包含上行请求和下行推送的一站式应用网关,对外提供TCP、TLS、HTTPS、HTTP、QUIC等众多通道进行传输数据,数据进行私有协议编解码。可以对外提供提供透传式代理服务、多个接口聚合服务以及GraphQL模块。在本次分享,将会介绍基于 OpenResty 构建的完整服务架构,当前所遇到的问题、解决的方式以及调试的线上技巧等。分享提纲:
1、基于 OpenResty 构建一站式网关概述;
2、我们遇到问题以及解决方式;
3、收获总结和问题反思。
分享嘉宾三:刘洋 / Polaristech 技术专家
曾就职于 Redhat、阿里云,10 余年研发经验,近期加入 Polaristech 投入边缘计算领域。作为 RHCA,不仅在 Linux 领域拥有丰富的技术积累,同时在工作中也积累了大量的市场经验。
分享话题:《 基于 OpenResty /Kong 构建边缘计算平台 》
随着移动端和固网宽带等高速网络的普及,计算能力正在向贴近用户的边缘位置迁移。本次分享,将会基于 Polaristech 帮助客户落地的 IOT 项目和银行的开放银行项目经验,介绍如何以 OpenResty 和 Kong 为基础框架构建边缘计算平台,实现就近接入、边缘加速、API 管理、分布式全链路管理等多方面的架构和设计经验。
分享嘉宾四:吴钧泽 / 好未来高级工程师
Swoft 开源框架开发者,ServiceMesher 社区成员 ,重度开源爱好者。目前主要负责好未来支付交易系统,对分布式系统架构、高性能应用有着浓厚的兴趣。
分享话题:《 当 OpenResty 遇上教育行业》
本次分享将会介绍 OpenResty 在教育行业的落地实践、性能优化等内容,介绍基于 Openresty 打造高性能的 PassPort 平台 Openresty 性能优化和在教育行业的有趣实践。分享提纲:
1、为什么选择 OpenResty ;
2、基于 Openresty 打造 PassPort 平台;
3、基于 Openresty 开发高性能 API Gateway ;
4、一些有趣的实践;
5、未来的规划。
分享嘉宾五:罗玉杰 / 京东云技术专家
10 余年 CDN、流媒体行业从业经验,热衷于开源软件的开发与研究,对 OpenResty、Nginx 模块开发有较深入的研究,熟悉 CDN 架构和主流流媒体协议。
分享话题:《 OpenResty 在直播场景的应用 》
本次分享,将会介绍基于 OpenResty、Redis 实现的 AWS S3 上传服务,将 TS、m3u8 文件上传至云存储,供 HLS 直播、时移、回看、延播下载使用;同时还将介绍直播、时移回看、延播服务等功能的实现。
六、现场礼品
一、活动介绍
OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。目前 OpenResty 是全球占有率排名第五的 Web 服务器,超过 1 万多家商业公司都在使用 OpenResty,包括又拍云、腾讯、奇虎360、京东、12306、Kong 等公司,应用在 CDN、广告系统、搜索、实现业务逻辑、余票查询、网关、ingress controller 等各种不同的场景下。
为促进 OpenResty 在技术圈的发展,增进 OpenResty 使用者的交流与学习,OpenResty 社区联合又拍云,举办 “OpenResty × Open Talk” 全国巡回沙龙,邀请业内资深的 OpenResty 技术专家,分享 OpenResty 实战经验,推动 OpenResty 开源项目的发展,促进互联网技术的教育。
二、报名地址
http://www.huodongxing.com/event/2481310558700
三、活动时间
2019 年 03 月 23 日(周六)
四、活动地址
北京市海淀区中关村大街 11 号E世界财富中心 A 座 B2 PEOPLE²
五、嘉宾与议题
分享嘉宾一:叶靖 / 又拍云平台开发部负责人
目前主要负责又拍云弹性云处理平台以及内部私有云的设计和开发工作,兼部分文件上传接口相关的工作。对 Python / Lua / Go 等语言有较深入的研究,在 ngx_lua 和 OpenResty 模块开发方面有丰富经验,专注于高并发、高可用服务架构设计,对 Docker 容器有较多的实践。平时热衷于参与开源社区分享开源经验。
分享话题:《 OpenResty 在又拍云容器平台中的应用 》
主要介绍 Kong、Ingress-Nginx 等基于 OpenResty 实现的 API 网关和负载均衡器的使用方法和工作原理,以及如何基于 OpenResty 实现高性能的外部负载网关。
分享嘉宾二:王辉 / 新浪微博产品部移动高级开发工程师
专注新浪微博后端业务,微博移动应用后端网关负责人,曾负责过视频直播、消息下推等系统。
分享话题:《 OpenResty 构建一站式应用网关实践 》
新浪微博基于 OpenResty 构建了一个包含上行请求和下行推送的一站式应用网关,对外提供TCP、TLS、HTTPS、HTTP、QUIC等众多通道进行传输数据,数据进行私有协议编解码。可以对外提供提供透传式代理服务、多个接口聚合服务以及GraphQL模块。在本次分享,将会介绍基于 OpenResty 构建的完整服务架构,当前所遇到的问题、解决的方式以及调试的线上技巧等。分享提纲:
1、基于 OpenResty 构建一站式网关概述;
2、我们遇到问题以及解决方式;
3、收获总结和问题反思。
分享嘉宾三:刘洋 / Polaristech 技术专家
曾就职于 Redhat、阿里云,10 余年研发经验,近期加入 Polaristech 投入边缘计算领域。作为 RHCA,不仅在 Linux 领域拥有丰富的技术积累,同时在工作中也积累了大量的市场经验。
分享话题:《 基于 OpenResty /Kong 构建边缘计算平台 》
随着移动端和固网宽带等高速网络的普及,计算能力正在向贴近用户的边缘位置迁移。本次分享,将会基于 Polaristech 帮助客户落地的 IOT 项目和银行的开放银行项目经验,介绍如何以 OpenResty 和 Kong 为基础框架构建边缘计算平台,实现就近接入、边缘加速、API 管理、分布式全链路管理等多方面的架构和设计经验。
分享嘉宾四:吴钧泽 / 好未来高级工程师
Swoft 开源框架开发者,ServiceMesher 社区成员 ,重度开源爱好者。目前主要负责好未来支付交易系统,对分布式系统架构、高性能应用有着浓厚的兴趣。
分享话题:《 当 OpenResty 遇上教育行业》
本次分享将会介绍 OpenResty 在教育行业的落地实践、性能优化等内容,介绍基于 Openresty 打造高性能的 PassPort 平台 Openresty 性能优化和在教育行业的有趣实践。分享提纲:
1、为什么选择 OpenResty ;
2、基于 Openresty 打造 PassPort 平台;
3、基于 Openresty 开发高性能 API Gateway ;
4、一些有趣的实践;
5、未来的规划。
分享嘉宾五:罗玉杰 / 京东云技术专家
10 余年 CDN、流媒体行业从业经验,热衷于开源软件的开发与研究,对 OpenResty、Nginx 模块开发有较深入的研究,熟悉 CDN 架构和主流流媒体协议。
分享话题:《 OpenResty 在直播场景的应用 》
本次分享,将会介绍基于 OpenResty、Redis 实现的 AWS S3 上传服务,将 TS、m3u8 文件上传至云存储,供 HLS 直播、时移、回看、延播下载使用;同时还将介绍直播、时移回看、延播服务等功能的实现。
六、现场礼品
收起阅读 »
社区日报 第543期 (2019-03-03)
http://t.cn/EIqkgoY
2.使用Elastic查询慢日志。
http://t.cn/EI5O93f
3.(自备梯子)学习Docker。
http://t.cn/EI5hnwf
编辑:至尊宝
归档:https://elasticsearch.cn/article/6498
订阅:https://tinyletter.com/elastic-daily
http://t.cn/EIqkgoY
2.使用Elastic查询慢日志。
http://t.cn/EI5O93f
3.(自备梯子)学习Docker。
http://t.cn/EI5hnwf
编辑:至尊宝
归档:https://elasticsearch.cn/article/6498
订阅:https://tinyletter.com/elastic-daily 收起阅读 »

社区日报 第542期 (2019-03-02)
- 降低ES成本的三个步骤 http://t.cn/EI2Ll21
2.利用Nginx保护ELK http://t.cn/EI2bmDD
- ES批量读取mget的用法 http://t.cn/EI2fxl5
- 降低ES成本的三个步骤 http://t.cn/EI2Ll21
2.利用Nginx保护ELK http://t.cn/EI2bmDD
- ES批量读取mget的用法 http://t.cn/EI2fxl5

社区日报 第541期 (2019-03-01)
http://t.cn/Efr2zS5
2、ElasticSearch——使用Hystrix合并请求提升同步性能
http://t.cn/EfrArPs
3、Laravel + ElasticSearch + RabbitMQ 全文搜索解决方案
http://t.cn/EfrAsKj
编辑:铭毅天下
归档:https://elasticsearch.cn/article/6496
订阅:https://tinyletter.com/elastic-daily
http://t.cn/Efr2zS5
2、ElasticSearch——使用Hystrix合并请求提升同步性能
http://t.cn/EfrArPs
3、Laravel + ElasticSearch + RabbitMQ 全文搜索解决方案
http://t.cn/EfrAsKj
编辑:铭毅天下
归档:https://elasticsearch.cn/article/6496
订阅:https://tinyletter.com/elastic-daily 收起阅读 »

ES6.* join类型的可行性
{
"产品id":"",
"产品名字":"",
"产品SKU":[
"skuid":""
"sku库存":"",
"sku销量":"",
"SKU经销权":[
{"经销商编号":"1","购买量":"","发货工厂":"","销售组织"},
{"经销商编号":"2","购买量":"","发货工厂":"","销售组织"}
]
],
"产品总销量":"",
"产品总库存":"",
]
}
想通过ES6.* 建立这种一对多 多对多的数据模型 有用过到生产环境的吗 现在测试已经满足子查父 同时根据子的排序 孙节点还没测过
{
"产品id":"",
"产品名字":"",
"产品SKU":[
"skuid":""
"sku库存":"",
"sku销量":"",
"SKU经销权":[
{"经销商编号":"1","购买量":"","发货工厂":"","销售组织"},
{"经销商编号":"2","购买量":"","发货工厂":"","销售组织"}
]
],
"产品总销量":"",
"产品总库存":"",
]
}
想通过ES6.* 建立这种一对多 多对多的数据模型 有用过到生产环境的吗 现在测试已经满足子查父 同时根据子的排序 孙节点还没测过 收起阅读 »

社区日报 第540期 (2019-02-28)
http://t.cn/Efm8eGf
2、opentracing和elastic APM构建微服务分布式追踪系统;
http://t.cn/Ef1dcco
3、Filebeat安装部署及配置详解;
http://t.cn/Ef1gtwq
编辑:wt
归档:https://elasticsearch.cn/article/6494
订阅:https://tinyletter.com/elastic-daily
http://t.cn/Efm8eGf
2、opentracing和elastic APM构建微服务分布式追踪系统;
http://t.cn/Ef1dcco
3、Filebeat安装部署及配置详解;
http://t.cn/Ef1gtwq
编辑:wt
归档:https://elasticsearch.cn/article/6494
订阅:https://tinyletter.com/elastic-daily 收起阅读 »

社区日报 第539期 (2019-02-27)
http://t.cn/EfRty3F
2.Elasticsearch 评分排序
http://t.cn/EfRtYWt
3.Elasticsearch 的查询器 query 与过滤器 filter 的区别
http://t.cn/EfRctYY
编辑:江水
归档:https://elasticsearch.cn/article/6403
订阅:https://tinyletter.com/elastic-daily
http://t.cn/EfRty3F
2.Elasticsearch 评分排序
http://t.cn/EfRtYWt
3.Elasticsearch 的查询器 query 与过滤器 filter 的区别
http://t.cn/EfRctYY
编辑:江水
归档:https://elasticsearch.cn/article/6403
订阅:https://tinyletter.com/elastic-daily 收起阅读 »

百度智能云招聘ElasticSearch研发工程师
- 负责ElasticSearch相关产品的设计、研发、维护
- 与相关大数据产品制定大数据解决方案
职责要求:
- 211或985大学本科毕业,计算机相关专业
- 熟悉Java/Go语言开发,熟悉常见的数据结构与算法
- 掌握网络编程和多线程开发
- 对ElasticSearch、Lucene、Slor的原理有较深入了解。
- 有对开源组件有过二次开发经验者优先
- 由社区贡献经验者优先
联系方式:shouchunbai@baidu.com
- 负责ElasticSearch相关产品的设计、研发、维护
- 与相关大数据产品制定大数据解决方案
职责要求:
- 211或985大学本科毕业,计算机相关专业
- 熟悉Java/Go语言开发,熟悉常见的数据结构与算法
- 掌握网络编程和多线程开发
- 对ElasticSearch、Lucene、Slor的原理有较深入了解。
- 有对开源组件有过二次开发经验者优先
- 由社区贡献经验者优先
联系方式:shouchunbai@baidu.com
收起阅读 »

社区日报 第538期 (2019-02-26)
http://t.cn/Ef02jCT
2、如何有效管理Elasticsearch分片使用效率。
http://t.cn/Ef02Rd7
3、Elasticsearch Helm 图表。
http://t.cn/EfOwOQu
PS:Elasticsearch官方培训来中国啦!
https://elasticsearch.cn/article/6400
编辑:叮咚光军
归档:https://elasticsearch.cn/article/6401
订阅:https://tinyletter.com/elastic-daily
http://t.cn/Ef02jCT
2、如何有效管理Elasticsearch分片使用效率。
http://t.cn/Ef02Rd7
3、Elasticsearch Helm 图表。
http://t.cn/EfOwOQu
PS:Elasticsearch官方培训来中国啦!
https://elasticsearch.cn/article/6400
编辑:叮咚光军
归档:https://elasticsearch.cn/article/6401
订阅:https://tinyletter.com/elastic-daily 收起阅读 »

Elastic 官方培训来中国啦
课程:Elasticsearch 工程师培训 I
时间:
2019 年 4 月 8 日星期一,上午 9:00 - 下午 5:00
2019 年 4 月 9 日星期二,上午 9:00 - 下午 5:00
地点:中国北京
详情及报名,请访问:https://training.elastic.co/ENGI/Beijing/April2019
课程:Elasticsearch 工程师培训 II
时间:
2019 年 4 月 11 日星期四,上午 9:00 - 下午 5:00
2019 年 4 月 12 日星期五,上午 9:00 - 下午 5:00
地点:中国北京
详情及报名,请访问:https://training.elastic.co/EN ... l2019
名额有限,有兴趣的同学可以关注一下。
课程:Elasticsearch 工程师培训 I
时间:
2019 年 4 月 8 日星期一,上午 9:00 - 下午 5:00
2019 年 4 月 9 日星期二,上午 9:00 - 下午 5:00
地点:中国北京
详情及报名,请访问:https://training.elastic.co/ENGI/Beijing/April2019
课程:Elasticsearch 工程师培训 II
时间:
2019 年 4 月 11 日星期四,上午 9:00 - 下午 5:00
2019 年 4 月 12 日星期五,上午 9:00 - 下午 5:00
地点:中国北京
详情及报名,请访问:https://training.elastic.co/EN ... l2019
名额有限,有兴趣的同学可以关注一下。 收起阅读 »

社区日报 第537期 (2019-02-25)
http://t.cn/EfXsbMV
2.elastic stack 6.6尝鲜体验
http://t.cn/EfahzC3
3.ELK日志系统优化过程之Elasticsearch优化
https://fwit.win/?p=1392
编辑:cyberdak
归档:
订阅:https://tinyletter.com/elastic-daily
http://t.cn/EfXsbMV
2.elastic stack 6.6尝鲜体验
http://t.cn/EfahzC3
3.ELK日志系统优化过程之Elasticsearch优化
https://fwit.win/?p=1392
编辑:cyberdak
归档:
订阅:https://tinyletter.com/elastic-daily 收起阅读 »

社区日报 第536期 (2019-02-24)
http://t.cn/EffVjlc
2.将数据从MySQL导入Elasticsearch并使用Kibana对其进行可视化。
http://t.cn/EfffRLT
3.(自备梯子)计算的未来是模拟的。
http://t.cn/EffxMjV
编辑:至尊宝
归档:https://elasticsearch.cn/article/6397
订阅:https://tinyletter.com/elastic-daily
http://t.cn/EffVjlc
2.将数据从MySQL导入Elasticsearch并使用Kibana对其进行可视化。
http://t.cn/EfffRLT
3.(自备梯子)计算的未来是模拟的。
http://t.cn/EffxMjV
编辑:至尊宝
归档:https://elasticsearch.cn/article/6397
订阅:https://tinyletter.com/elastic-daily 收起阅读 »

社区日报 第535期 (2019-02-23)
- solr以及es的相似度解析 http://t.cn/EfLLxzD
2.搭建ES集群全步骤 http://t.cn/EfLWeSG
- 用ElasticSearch实现漏斗用户旅程跟踪服务(自备梯子) http://t.cn/EfLHsOM
- solr以及es的相似度解析 http://t.cn/EfLLxzD
2.搭建ES集群全步骤 http://t.cn/EfLWeSG
- 用ElasticSearch实现漏斗用户旅程跟踪服务(自备梯子) http://t.cn/EfLHsOM

ELK 使用小技巧(第 5 期)
ELK Tips 主要介绍一些 ELK 使用过程中的小技巧,内容主要来源为 Elastic 中文社区。
一、Logstash
1、Logstash 性能调优主要参数
pipeline.workers
:设置启动多少个线程执行 fliter 和 output;当 input 的内容出现堆积而 CPU 使用率还比较充足时,可以考虑增加该参数的大小;pipeline.batch.size
:设置单个工作线程在执行过滤器和输出之前收集的最大事件数,较大的批量大小通常更高效,但会增加内存开销。输出插件会将每个批处理作为一个输出单元。;例如,ES 输出会为收到的每个批次发出批量请求;调整pipeline.batch.size
可调整发送到 ES 的批量请求(Bulk)的大小;pipeline.batch.delay
:设置 Logstash 管道的延迟时间, 管道批处理延迟是 Logstash 在当前管道工作线程中接收事件后等待新消息的最长时间(以毫秒为单位);简单来说,当pipeline.batch.size
不满足时,会等待pipeline.batch.delay
设置的时间,超时后便开始执行 filter 和 output 操作。
2、'reader' unacceptable character ' ' (0x0)
logstash 执行使用 Jdbc input plugin
后报错:
[main]-pipeline-manager] ERROR logstash.agent - Pipeline aborted due to error {
:exception=>#<Psych::SyntaxError: (): 'reader' unacceptable character ' ' (0x0) special characters are not allowed in "'reader'",
position 0 at line 0 column 0>, :backtrace=>["org/jruby/ext/psych/PsychParser.java:232:in parse'"
解决方案:删除 $USER_HOME/.logstash_jdbc_last_run
文件即可。
二、Elasticsearch
1、TermsQuery 与多个 TermQuery 的区别
当 terms 的个数较少的时候,TermsQuery 等效为 ConstantScoreQuery 内部包含多个 TermQuery:
Query q1 = new TermInSetQuery(new Term("field", "foo"), new Term("field", "bar"));
// 等效为下面的语句
BooleanQuery bq = new BooleanQuery();
bq.add(new TermQuery(new Term("field", "foo")), Occur.SHOULD);
bq.add(new TermQuery(new Term("field", "bar")), Occur.SHOULD);
Query q2 = new ConstantScoreQuery(bq);
当 terms 较多的时候,它将使用匹配的文档组合成一个位集,并在该位集上进行评分;此时查询效率比普通的 Bool 合并要更加高效。
当 terms 的个数较多时,TermsQuery 比多个 TermQuery 组合的查询效率更高。
2、ES 借助 nginx 配置域名
upstream /data/ {
server 192.168.187.xxx:9200;
keepalive 300 ;
}
server {
listen 80;
server_name testelk.xx.com;
keepalive_timeout 120s 120s;
location /data {
proxy_pass http://data/;
proxy_http_version 1.1;
proxy_set_header Connection "Keep-Alive";
proxy_set_header Proxy-Connection "Keep-Alive";
proxy_set_header X-Real-IP $remote_addr;
proxy_pass_header remote_user
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Nginx-Proxy true;
}
}
3、ES Reindex 时如何不停止写入服务
方案一:kennywu76
ES 的 reindex 在索引有实时的 update/delete 的情况下,即使借助 alias,也没有办法实现真正的 zero down time。
增加新文档比较好办,通过 alias 切换写入到新索引,同时 reindex 做旧->新索引的数据传输即可;但是 update/delete 操作针对的文档如果还未从旧索引传输过来,直接对新索引操作会导致两个索引数据不一致。
我能够想到的(一个未经实际验证)的方案,前提是数据库里的文档有一个类似 last_update_time
字段记录文档最后更新的时间,用作写入 ES 文档的版本号,然后数据写入新索引的时候,url 里带上下面这样的参数:version_type=external_gt&version=xxxxxx
。
其中 version_type=external_gt
表示写入文档的版本号大于已有的文档版本号,或者文档不存在,写入才会成功,否则会抛版本冲突的异常。另外 delete 操作都要转换成 index 操作,index 的内容可以是一个空文档。
这样实时数据写入新索引和 reindex 可以同时进行,实时写入的数据应该具有更高的版本,总是能够成功,reindex 如果遇到版本冲突,说明该文档被实时部分更新过了,已经过时,可以直接放弃跳过。
该方案的缺陷:
- 要求数据源里的数据具有版本信息,可能因为各种局限,不太容易更改;
- delete 操作必须转化为写入一个空文档,delete 实际上是一个标记文档,并且本身也有版本信息。但是如果后端发生了 segment merge,delete 可能会被合并以后物理清除。这样 delete 和对应的版本信息丢失,之后 reindex 如果写入了旧版本的文档,仍然会有一致性问题;但是空文档会增加索引文件的大小,有额外的消耗,一个可能的缓解办法是在 reindex 全部做完以后,再做一次空文档的删除。
改进方案:the_best
重建索引步骤如下:
- 保证 delete 操作都要转换成 index 操作,index 的内容可以是一个空文档;
- 对老索引
old_index
(业务上的别名还是挂在老索引上)进行重索引操作(version_type=external
);curl -X POST 'http://<hostname>:9200/_reindex' { "conflicts": "proceed", "source": { "index": "old_index", "size": 1000 }, "dest": { "index": "new_index", "version_type": "external" } }
- 将别名切到 newIndex;
- 将重索引时间段内
old_index
产生的热数据,再捞一次到new_index
中(conflicts=proceed&version_type=external
);curl -X POST /_reindex { "conflicts": "proceed", "source": { "index": "old_index" "query": { "constant_score" : { "filter" : { "range" : { "data_update_time" : { "gte" : <reindex开始时刻前的毫秒时间戳> } } } } } }, "dest": { "index": "new_index", "version_type": "external" } }
- 手动做一次空文档的删除。
这种方式取决于重索引期间产生的数据量大小(会影响步骤4的用时),不过我们可以视具体业务情况灵活操作。比如说数据量比较大重索引我们用了10个小时(这10个小时内新产生了200多万的数据),在切别名前,我们可以按步骤(4)的调用方式,把近10个小时的数据再捞一遍到新索引中,如此迭代个几次,直到别名切完后,我们能保证最后一次的步骤(4)可以在较短时间内完成。
4、ES 节点通讯配置
http.port: 9200
http.bind_host: 127.0.0.1
transport.tcp.port: 9300
transport.bind_host: 127.0.0.1
5、把 Lucene 的原生 query 传给 ES
SearchRequest searchRequest = new SearchRequest(indexName);
searchRequest.types(typeName);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.from(0);
sourceBuilder.size(10);
sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
//q为Lucene检索表达式, 直接输入关键词匹配_all或者*字段, 字段匹配user:kimchy,
//多字段匹配user:kimchy AND message:Elasticsearch
QueryStringQueryBuilder queryStringQueryBuilder = QueryBuilders.queryStringQuery(q);
sourceBuilder.query(queryStringQueryBuilder);
searchRequest.source(sourceBuilder);
SearchResponse searchResponse = restHighLevelClient.search(searchRequest);
SearchHits searchHits = searchResponse.getHits();
6、ES 文档字段个数限制
ES 文档默认不允许文档字段超过 1000,超过 1000 会报如下错误:
failed to put mappings on indices [[[nfvoemspm/srjL3cMMRUqa7DgOrYqX-A]]], type [log]
java.lang.IllegalArgumentException: Limit of total fields [1000] in index [xxx] has been exceeded
可以通过修改索引配置来修改字段个数限制,不过还是推荐从业务上进行优化:
修改settings
{
"index.mapping.total_fields.limit": 2000
}
7、将 DSL 字符串转换为 QueryBuilder
## wrapper 案例
GET /_search
{
"query" : {
"wrapper": {
"query" : "eyJ0ZXJtIiA6IHsgInVzZXIiIDogIktpbWNoeSIgfX0="
}
}
}
## RestClient
QueryBuilders.wrapperQuery("{\"term\": {\"field\":\"value\"}}")
8、ES 集群重启后 Slice Scroll 速度变慢
重启机器之后,pagecache 都没有了,所有数据都要重新从磁盘加载。
9、ES 开启索引新建删除日志
PUT _cluster/settings
{
"persistent": {
"logger.cluster.service": "DEBUG"
}
}
10、慢日志全局级别设定
- 对已经存在的索引可以通过 PUT _settings 做存量设置
- 对之后新增的索引,可以使用类似于下面的template
PUT _template/global-slowlog_template { "order": -1, "version": 0, "template": "*", "settings": { "index.indexing.slowlog.threshold.index.debug" : "10ms", "index.indexing.slowlog.threshold.index.info" : "50ms", "index.indexing.slowlog.threshold.index.warn" : "100ms", "index.search.slowlog.threshold.fetch.debug" : "100ms", "index.search.slowlog.threshold.fetch.info" : "200ms", "index.search.slowlog.threshold.fetch.warn" : "500ms", "index.search.slowlog.threshold.query.debug" : "100ms", "index.search.slowlog.threshold.query.info" : "200ms", "index.search.slowlog.threshold.query.warn" : "1s" } }
11、TCP 设置多个端口的用途
transport.tcp.port
这个参数不写,默认为9300-9399
,开放那么多 端口有用么?
- 如果设置一个端口,假设这个端口占用了程序就无法正常启动;
- 如果设置多个端口,一个端口占用会寻找下一个端口,直至找到可用端口。
12、ES 临时重启,设置分片延迟分配策略
PUT _all/_settings
{
"settings": {
"index.unassigned.node_left.delayed_timeout": "5m"
}
}
三、Kibana
1、kibana 图表自定义标注
可以用 TSVB,支持标注。
Kibana TSVB 注解的使用:https://elasticsearch.cn/article/701
2、Kibana discover 导出 csv 文件
请参考文章:如何快速把 Kibana Discover 页的 Document Table 导出成 CSV
3、修改 kibana 的默认主页
四、社区文章精选
Any Code,Code Any!
扫码关注『AnyCode』,编程路上,一起前行。
ELK Tips 主要介绍一些 ELK 使用过程中的小技巧,内容主要来源为 Elastic 中文社区。
一、Logstash
1、Logstash 性能调优主要参数
pipeline.workers
:设置启动多少个线程执行 fliter 和 output;当 input 的内容出现堆积而 CPU 使用率还比较充足时,可以考虑增加该参数的大小;pipeline.batch.size
:设置单个工作线程在执行过滤器和输出之前收集的最大事件数,较大的批量大小通常更高效,但会增加内存开销。输出插件会将每个批处理作为一个输出单元。;例如,ES 输出会为收到的每个批次发出批量请求;调整pipeline.batch.size
可调整发送到 ES 的批量请求(Bulk)的大小;pipeline.batch.delay
:设置 Logstash 管道的延迟时间, 管道批处理延迟是 Logstash 在当前管道工作线程中接收事件后等待新消息的最长时间(以毫秒为单位);简单来说,当pipeline.batch.size
不满足时,会等待pipeline.batch.delay
设置的时间,超时后便开始执行 filter 和 output 操作。
2、'reader' unacceptable character ' ' (0x0)
logstash 执行使用 Jdbc input plugin
后报错:
[main]-pipeline-manager] ERROR logstash.agent - Pipeline aborted due to error {
:exception=>#<Psych::SyntaxError: (): 'reader' unacceptable character ' ' (0x0) special characters are not allowed in "'reader'",
position 0 at line 0 column 0>, :backtrace=>["org/jruby/ext/psych/PsychParser.java:232:in parse'"
解决方案:删除 $USER_HOME/.logstash_jdbc_last_run
文件即可。
二、Elasticsearch
1、TermsQuery 与多个 TermQuery 的区别
当 terms 的个数较少的时候,TermsQuery 等效为 ConstantScoreQuery 内部包含多个 TermQuery:
Query q1 = new TermInSetQuery(new Term("field", "foo"), new Term("field", "bar"));
// 等效为下面的语句
BooleanQuery bq = new BooleanQuery();
bq.add(new TermQuery(new Term("field", "foo")), Occur.SHOULD);
bq.add(new TermQuery(new Term("field", "bar")), Occur.SHOULD);
Query q2 = new ConstantScoreQuery(bq);
当 terms 较多的时候,它将使用匹配的文档组合成一个位集,并在该位集上进行评分;此时查询效率比普通的 Bool 合并要更加高效。
当 terms 的个数较多时,TermsQuery 比多个 TermQuery 组合的查询效率更高。
2、ES 借助 nginx 配置域名
upstream /data/ {
server 192.168.187.xxx:9200;
keepalive 300 ;
}
server {
listen 80;
server_name testelk.xx.com;
keepalive_timeout 120s 120s;
location /data {
proxy_pass http://data/;
proxy_http_version 1.1;
proxy_set_header Connection "Keep-Alive";
proxy_set_header Proxy-Connection "Keep-Alive";
proxy_set_header X-Real-IP $remote_addr;
proxy_pass_header remote_user
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Nginx-Proxy true;
}
}
3、ES Reindex 时如何不停止写入服务
方案一:kennywu76
ES 的 reindex 在索引有实时的 update/delete 的情况下,即使借助 alias,也没有办法实现真正的 zero down time。
增加新文档比较好办,通过 alias 切换写入到新索引,同时 reindex 做旧->新索引的数据传输即可;但是 update/delete 操作针对的文档如果还未从旧索引传输过来,直接对新索引操作会导致两个索引数据不一致。
我能够想到的(一个未经实际验证)的方案,前提是数据库里的文档有一个类似 last_update_time
字段记录文档最后更新的时间,用作写入 ES 文档的版本号,然后数据写入新索引的时候,url 里带上下面这样的参数:version_type=external_gt&version=xxxxxx
。
其中 version_type=external_gt
表示写入文档的版本号大于已有的文档版本号,或者文档不存在,写入才会成功,否则会抛版本冲突的异常。另外 delete 操作都要转换成 index 操作,index 的内容可以是一个空文档。
这样实时数据写入新索引和 reindex 可以同时进行,实时写入的数据应该具有更高的版本,总是能够成功,reindex 如果遇到版本冲突,说明该文档被实时部分更新过了,已经过时,可以直接放弃跳过。
该方案的缺陷:
- 要求数据源里的数据具有版本信息,可能因为各种局限,不太容易更改;
- delete 操作必须转化为写入一个空文档,delete 实际上是一个标记文档,并且本身也有版本信息。但是如果后端发生了 segment merge,delete 可能会被合并以后物理清除。这样 delete 和对应的版本信息丢失,之后 reindex 如果写入了旧版本的文档,仍然会有一致性问题;但是空文档会增加索引文件的大小,有额外的消耗,一个可能的缓解办法是在 reindex 全部做完以后,再做一次空文档的删除。
改进方案:the_best
重建索引步骤如下:
- 保证 delete 操作都要转换成 index 操作,index 的内容可以是一个空文档;
- 对老索引
old_index
(业务上的别名还是挂在老索引上)进行重索引操作(version_type=external
);curl -X POST 'http://<hostname>:9200/_reindex' { "conflicts": "proceed", "source": { "index": "old_index", "size": 1000 }, "dest": { "index": "new_index", "version_type": "external" } }
- 将别名切到 newIndex;
- 将重索引时间段内
old_index
产生的热数据,再捞一次到new_index
中(conflicts=proceed&version_type=external
);curl -X POST /_reindex { "conflicts": "proceed", "source": { "index": "old_index" "query": { "constant_score" : { "filter" : { "range" : { "data_update_time" : { "gte" : <reindex开始时刻前的毫秒时间戳> } } } } } }, "dest": { "index": "new_index", "version_type": "external" } }
- 手动做一次空文档的删除。
这种方式取决于重索引期间产生的数据量大小(会影响步骤4的用时),不过我们可以视具体业务情况灵活操作。比如说数据量比较大重索引我们用了10个小时(这10个小时内新产生了200多万的数据),在切别名前,我们可以按步骤(4)的调用方式,把近10个小时的数据再捞一遍到新索引中,如此迭代个几次,直到别名切完后,我们能保证最后一次的步骤(4)可以在较短时间内完成。
4、ES 节点通讯配置
http.port: 9200
http.bind_host: 127.0.0.1
transport.tcp.port: 9300
transport.bind_host: 127.0.0.1
5、把 Lucene 的原生 query 传给 ES
SearchRequest searchRequest = new SearchRequest(indexName);
searchRequest.types(typeName);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.from(0);
sourceBuilder.size(10);
sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
//q为Lucene检索表达式, 直接输入关键词匹配_all或者*字段, 字段匹配user:kimchy,
//多字段匹配user:kimchy AND message:Elasticsearch
QueryStringQueryBuilder queryStringQueryBuilder = QueryBuilders.queryStringQuery(q);
sourceBuilder.query(queryStringQueryBuilder);
searchRequest.source(sourceBuilder);
SearchResponse searchResponse = restHighLevelClient.search(searchRequest);
SearchHits searchHits = searchResponse.getHits();
6、ES 文档字段个数限制
ES 文档默认不允许文档字段超过 1000,超过 1000 会报如下错误:
failed to put mappings on indices [[[nfvoemspm/srjL3cMMRUqa7DgOrYqX-A]]], type [log]
java.lang.IllegalArgumentException: Limit of total fields [1000] in index [xxx] has been exceeded
可以通过修改索引配置来修改字段个数限制,不过还是推荐从业务上进行优化:
修改settings
{
"index.mapping.total_fields.limit": 2000
}
7、将 DSL 字符串转换为 QueryBuilder
## wrapper 案例
GET /_search
{
"query" : {
"wrapper": {
"query" : "eyJ0ZXJtIiA6IHsgInVzZXIiIDogIktpbWNoeSIgfX0="
}
}
}
## RestClient
QueryBuilders.wrapperQuery("{\"term\": {\"field\":\"value\"}}")
8、ES 集群重启后 Slice Scroll 速度变慢
重启机器之后,pagecache 都没有了,所有数据都要重新从磁盘加载。
9、ES 开启索引新建删除日志
PUT _cluster/settings
{
"persistent": {
"logger.cluster.service": "DEBUG"
}
}
10、慢日志全局级别设定
- 对已经存在的索引可以通过 PUT _settings 做存量设置
- 对之后新增的索引,可以使用类似于下面的template
PUT _template/global-slowlog_template { "order": -1, "version": 0, "template": "*", "settings": { "index.indexing.slowlog.threshold.index.debug" : "10ms", "index.indexing.slowlog.threshold.index.info" : "50ms", "index.indexing.slowlog.threshold.index.warn" : "100ms", "index.search.slowlog.threshold.fetch.debug" : "100ms", "index.search.slowlog.threshold.fetch.info" : "200ms", "index.search.slowlog.threshold.fetch.warn" : "500ms", "index.search.slowlog.threshold.query.debug" : "100ms", "index.search.slowlog.threshold.query.info" : "200ms", "index.search.slowlog.threshold.query.warn" : "1s" } }
11、TCP 设置多个端口的用途
transport.tcp.port
这个参数不写,默认为9300-9399
,开放那么多 端口有用么?
- 如果设置一个端口,假设这个端口占用了程序就无法正常启动;
- 如果设置多个端口,一个端口占用会寻找下一个端口,直至找到可用端口。
12、ES 临时重启,设置分片延迟分配策略
PUT _all/_settings
{
"settings": {
"index.unassigned.node_left.delayed_timeout": "5m"
}
}
三、Kibana
1、kibana 图表自定义标注
可以用 TSVB,支持标注。
Kibana TSVB 注解的使用:https://elasticsearch.cn/article/701
2、Kibana discover 导出 csv 文件
请参考文章:如何快速把 Kibana Discover 页的 Document Table 导出成 CSV
3、修改 kibana 的默认主页
四、社区文章精选
Any Code,Code Any!
扫码关注『AnyCode』,编程路上,一起前行。