Q:ES集群据说存储容量达到一定量的时候索引创建速度会下降,有没有具体参考值,大概多大存储量?平均每个es节点的索引创建速度能达到多少条/s?
我问下现在的大集群最大能支撑多大的节点,存储容量瓶颈大概是多少,达到一定程度的时候是否需要做拆分?
A:这几个问题一起回答。ES目前集群规模是受限的,7.x之后节点据官方说能超过1000个,但是索引和shard规模依赖不能太大,目前超过10w个应该会有稳定性问题,大面积故障的恢复时间可能会很长,达到小时级别。
es节点的写入性能取决于机器的规格、数据大小、创建索引的数量和是否是text类型等。我们验证在16CPU 64G内存 3T SSD节点,数据平均大小5k,索引字段10个左右,写入能到4w/s。
我有几个问题比较好奇:
1、离线索引构建的周期是一天一次么?相当于业务的全量数据,通过离线索引构建流程,一天生成一个离线索引,然后装载到 ES 节点。
2、如果业务方想在当前索引中新增一个字段,离线索引构建流程是如何支持新字段的数据构建到索引里头的(PPT 23页)?
3、假设 4.12号 构建了一个离线索引,到4.13又需要构建一个新的离线索引了,在索引切换时,是否影响线上服务的读写请求?如何做到“无缝切换”的?
我们在实际业务开发中,除了线上的搜索流程外,经常还会碰到一些其他的“离线”业务需求需要使用“索引数据”,如果直接读 ES 索引(query查询是倒排检索数据)就会影响线上搜索流程(稳定性 or 线上请求的响应时间),因此需要一张 “索引底表”来满足其他需要使用 ES 索引数据的
业务需求
。
这里的业务需求是指:一些使用“正排信息字段”的情况,比如需要按ES索引中某个字段进行过滤查询。
从分享的 PPT 中看,只有业务的 Hive 表(多张 Hive 表 join 成一张即可)可以作为“索引底表数据”,但是 Hive 表的查询能力受限(比如 java 后端服务查 Hive 去处理数据太慢了),无法满足需求。
你们的业务方就没有使用“索引底表”的情况么?如果有的话,是如何解决的?