高并发系统实战课
徐长龙
前微博架构师、极客时间架构师
11663 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 30 讲
结束语&结课测试 (2讲)
高并发系统实战课
15
15
1.0x
00:00/00:00
登录|注册

12|引擎分片:Elasticsearch如何实现大数据检索?

实际安装生产环境时的服务器需求
Elasticsearch集群中服务分多个角色
数据流向
实现Elasticsearch的核心功能
设计思路和算法
技术要点
Elasticsearch的市场地位
查询过程及优化
Lucene的具体实现
倒排索引的实现原理
查询性能问题及限制
查询请求的协调过程
多节点及多分片对查询的影响
索引按天建立
冷热数据分离
分布式写入机制
索引存储结构
Elasticsearch架构
ELK中储存、索引等关键技术点的架构实现
ELK对日志系统的强大支撑
思考题
总结
Elasticsearch的倒排索引
Elasticsearch的两次查询
Elasticsearch的写存储机制
Elasticsearch架构

该思维导图由 AI 生成,仅供参考

你好,我是徐长龙。
上节课我们看到了 ELK 对日志系统的强大支撑,如果没有它的帮助,我们自己实现分布式链路跟踪其实是十分困难的。
为什么 ELK 功能这么强大?这需要我们了解 ELK 中储存、索引等关键技术点的架构实现才能想清楚。相信你学完今天的内容,你对大数据分布式的核心实现以及大数据分布式统计服务,都会有更深入的理解。

Elasticsearch 架构

那么 ELK 是如何运作的?它为什么能够承接如此大的日志量?
我们先分析分析 ELK 的架构长什么样,事实上,它和 OLAP 及 OLTP 的实现区别很大,我们一起来看看。Elasticsearch 架构如下图:
整体的数据流向图
我们对照架构图,梳理一下整体的数据流向,可以看到,我们项目产生的日志,会通过 Filebeat 或 Rsyslog 收集将日志推送到 Kafka 内。然后由 LogStash 消费 Kafka 内的日志、对日志进行整理,并推送到 Elasticsearch 集群内。
接着,日志会被分词,然后计算出在文档的权重后放入索引中供查询检索,Elasticsearch 会将这些信息推送到不同的分片。每个分片都会有多个副本,数据写入时,只有大部分副本写入成功了,主分片才会对索引进行落地(需要你回忆下分布式写一致知识)
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Elasticsearch架构及其实现的大数据检索机制是本文的重点。文章深入介绍了ELK架构,包括数据流向、各节点角色及其作用,以及实际部署时的最佳实践。此外,详细解释了Elasticsearch的写存储机制,包括分片、索引、数据存储优化等方面的内容。文章还介绍了Elasticsearch的两次查询过程,包括查询请求的负载均衡、结果汇总排序等细节。通过对Lucene的具体实现,阐述了Elasticsearch通过组合小Lucene的服务实现大型分布式数据的全文检索。文章强调了Elasticsearch在分布式设计思路和算法优化方面的突出表现,如分布式共识算法、倒排索引、词权重、匹配权重、分词、异步同步、数据一致性检测等。总的来说,本文对于想要深入了解Elasticsearch的读者来说,是一篇值得阅读的文章。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《高并发系统实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(5)

  • 最新
  • 精选
  • Geek4892
    老师好,答疑课堂后续还会更新吗

    作者回复: 你好,如果有问题可以直接在文章下面询问,等问题足够多后会和小编一起看看做合集

    2023-10-19归属地:江苏
  • 王建坤
    es是先获取到shardid集合然后再去请求这些shard来获取数据(https://jiankunking.com/elasticsearch-search-source-code-analysis.html); 文中说的,请求所有data节点是指到shardid集合获取数据?

    作者回复: 你好,建坤,这个页面是白页。另外这个如何工作的方式是取决于配置的不是固定的。具体有几种方式,这里单独拿出他做例子只是为了破冰,打破固定思维

    2023-05-22归属地:山东
  • Spoon
    文章:Elasticsearch 每次查询都是请求所有索引所在的 Data 节点,查询请求时协调节点会在相同数据分片多个副本中,随机选出一个节点发送查询请求,从而实现负载均衡 问题: 1.请求所有索引所在的 Data 节点,这个Data节点是什么?和普通数据节点有什么区别? 2.如果所有索引放在一个Data节点,是不是会有容量限制? 3.如果将索引分片,放在多个节点,是不是又陷入了数据定位的问题?

    作者回复: 你好,spoon,这个请求偷懒的方式是请求所有data节点,如果没有则不返回,精致一点的方式是获取到data分布在哪几组服务器上。1、data节点是存储节点,同时也可以设置拥有计算查询服务能力。2、会有容量限制同时还会存在性能不能扩展问题。3、数据定位必然存在,文中提及会请求所有data节点就是因为这个问题。

    2023-04-02归属地:浙江
  • 徐石头
    来公司做的第一件事就是把搜索从mysql迁移到Elasticsearch,然后用CQRS架构解析binlog写入,Elasticsearch,用Elasticsearch做app内的内容搜索功能,我猜测极客时间的搜索功能也是用的Elasticsearch。 在做搜索相关的业务首选的便是Elasticsearch,所以如果我来实现Elasticsearch最先解决的功能便是分词和倒排索引设计,至于链路追踪和日志采集相关的组件,从业务角度我觉得地位没有搜索重要,优先级没有那么高。

    作者回复: 你好,感谢你的分享!

    2022-12-16归属地:内蒙古
  • John
    老师能否列一下相关的扩展阅读资料,比如词频统计,search_type 详解之类的,不胜感激

    作者回复: 你好,John,在文章中有提及,我认为有帮助的可以先看:分布式共识算法、倒排索引、词权重、匹配权重、分词、异步同步、数据一致性检测,看完这些后,如果还有兴趣再深入挖掘一下其他方面

    2022-11-20归属地:北京
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部