有个人长的像洋葱,走着走着就哭了…….

《滴滴离线索引快速构建 FastIndex 架构实践》问题解答

Elasticsearch | 作者 weizijun | 发布于2020年04月04日 | 阅读数:4724

今天下午《滴滴离线索引快速构建 FastIndex 架构实践》的分享,大家反响热烈,分享的ppt已经上传:https://elasticsearch.cn/slides/255。大家提出了很多问题,这里将问题整理在这个帖子里。大家感兴趣的话,也可以继续留言发问。
已邀请:

weizijun - elasticsearch fan

赞同来自:

Q:ES集群据说存储容量达到一定量的时候索引创建速度会下降,有没有具体参考值,大概多大存储量?平均每个es节点的索引创建速度能达到多少条/s?
我问下现在的大集群最大能支撑多大的节点,存储容量瓶颈大概是多少,达到一定程度的时候是否需要做拆分?
A:这几个问题一起回答。ES目前集群规模是受限的,7.x之后节点据官方说能超过1000个,但是索引和shard规模依赖不能太大,目前超过10w个应该会有稳定性问题,大面积故障的恢复时间可能会很长,达到小时级别。
es节点的写入性能取决于机器的规格、数据大小、创建索引的数量和是否是text类型等。我们验证在16CPU 64G内存 3T SSD节点,数据平均大小5k,索引字段10个左右,写入能到4w/s。

weizijun - elasticsearch fan

赞同来自:

Q:滴滴dcdr和官方ccr做了哪些改进?
A:ccr是收费的,所以滴滴自研了dcdr,实时数据基于translog推送方式,存量数据通过segment文件拷贝,更多细节我们后面会单独分享。

weizijun - elasticsearch fan

赞同来自:

Q:每个cdh节点都要安装一个es吗 那同一个es要服务的reduce任务可能会很多啊 性能上能够跟得上吗
A:每个reduce任务起一个es进程,不同reduce任务使用不同的es进程,es进程是FastIndex系统自身管控的。

weizijun - elasticsearch fan

赞同来自:

Q:导入lucene文件不用做ES重启吗?怎么做到的啊?
A:不需要重启ES,滴滴做了一个 AppendLucene 插件,可以在线加载lucene文件。

weizijun - elasticsearch fan

赞同来自:

Q:这种方案如何保证数据一致性,数据不丢失?
A:这次分享的是离线导入,数据一致性是通过任务本身对比导入前后数据量,是否有失败来判断的

weizijun - elasticsearch fan

赞同来自:

Q:同样都是用ES生成的Lucene,为什么效率提升了这么多,是离线生成的集群资源比较多吗
A:FastIndex是利用了Hadoop强大的计算能力,使用的离线资源越多,导入数据越快。

weizijun - elasticsearch fan

赞同来自:

Q:hdfs上的文件load到es datanode,这一步怎么减少磁盘io
A:这一步的IO开销主要来自于lucene文件拷贝,不能再减少了,但是相比直接写数据到ES集群,IO减少了非常多,因为写数据过程中还有写translog开销+merge开销。

weizijun - elasticsearch fan

赞同来自:

Q:怎么处理线上集群指标突然偏高或者100%的告警
A:先要确认负载飙高的原因来自于查询还是写入,滴滴内部写入可以在clientnode层限流来降低写入导致的负载飙高,查询可以在ES-Gateway层的DSL流控模块来降低查询导致的负载飙高

weizijun - elasticsearch fan

赞同来自:

Q:这个导入场景就是个离线场景吗?实时的写入是怎么处理的?
 有啥实时写入的方案吗
A:滴滴内部实时写入主要是将kafka数据实时同步到ES,包括log、binlog以及用户本身在kafka的数据,完整的同步功能,在滴滴内部有一个同步中心的服务完成。可以做很多源端引擎到目的端引擎的实时、离线同步。滴滴还支持通过ES-Gateway直接往ES写实时数据。

weizijun - elasticsearch fan

赞同来自:

Q:滴滴对使用es的人有暴露集群的概念吗
A:滴滴ES平台对用户暴露的是逻辑集群和逻辑索引的概念,逻辑集群用来做资源隔离,逻辑索引是用户使用的索引,用户无需关心ES平台内真实的的物理集群、索引分布情况。

hapjin

赞同来自:

您好,这个有视频链接回看么?

hapjin

赞同来自:

我有几个问题比较好奇:
1、离线索引构建的周期是一天一次么?相当于业务的全量数据,通过离线索引构建流程,一天生成一个离线索引,然后装载到 ES 节点。
2、如果业务方想在当前索引中新增一个字段,离线索引构建流程是如何支持新字段的数据构建到索引里头的(PPT 23页)?
3、假设 4.12号 构建了一个离线索引,到4.13又需要构建一个新的离线索引了,在索引切换时,是否影响线上服务的读写请求?如何做到“无缝切换”的?

hapjin

赞同来自:

我们在实际业务开发中,除了线上的搜索流程外,经常还会碰到一些其他的“离线”业务需求需要使用“索引数据”,如果直接读 ES 索引(query查询是倒排检索数据)就会影响线上搜索流程(稳定性 or 线上请求的响应时间),因此需要一张 “索引底表”来满足其他需要使用 ES 索引数据的业务需求


这里的业务需求是指:一些使用“正排信息字段”的情况,比如需要按ES索引中某个字段进行过滤查询。


 
从分享的 PPT 中看,只有业务的 Hive 表(多张 Hive 表 join 成一张即可)可以作为“索引底表数据”,但是 Hive 表的查询能力受限(比如 java 后端服务查 Hive 去处理数据太慢了),无法满足需求。
 
 
你们的业务方就没有使用“索引底表”的情况么?如果有的话,是如何解决的?

hapjin

赞同来自:

发现一个相关的链接,参考:Cloudera Search User Guide(https://docs.cloudera.com/docu ... .html

要回复问题请先登录注册