增强Elasticsearch集群数据导入性能
特性介绍
数据导入性能增强为云搜索服务自主研发的特性,通过优化Bulk路由、文本索引加速、分词加速等方式,有效提升导入性能以及降低写入拒绝的情况。适用于索引分片较多、文本索引量大、导入吞吐量高的场景。
优化方式 |
功能描述 |
相关文档 |
---|---|---|
Bulk路由优化 |
根据Elasticsearch默认的路由规则,Bulk请求中的每一条数据会被路由到不同的shard,当索引分片较多时,会产生大量的内部转发请求,在大规模写入场景下容易触发写拒绝。同时,在大规模集群中,长尾效应会导致Bulk请求时延较高。
通过指定配置项“index.bulk_routing”可以开启集群的Bulk路由优化,该优化可以减少内部转发的请求数量,在shard数较多的场景下,能够有效提升写入性能以及减少写入拒绝。
说明:
开启Bulk路由优化后(即“index.bulk_routing”设置为“pack”或“ocal_pack”),数据写入不再根据“_id”进行路由,与路由的相关功能使用会受限,例如根据“_id”进行文档GET请求可能失败。 |
|
Bulk聚合优化 |
通过指定配置项“index.aggr_perf_batch_size”可以开启集群的Bulk聚合优化。Bulk聚合优化是通过批量导入将Bulk请求中的doc从单个依次写入变为批量写入,该方案可以有效减少内存申请、锁申请、及其他调用开销,从而提升数据导入性能。 |
|
文本索引加速 |
通过指定配置项“index.native_speed_up”可以开启文本索引加速。索引加速功能通过优化索引流程以及内存使用等方式实现,对于文本字段(text、keyword)能够极大提升索引构建的性能。当开启文本索引加速时,支持通过指定配置项“index.native_analyzer”同时开启分词加速。对于需要分词的文本字段(text),当无特殊分词需求时可以开启分词加速提升分词性能。
说明:
|
|
索引merge任务优化 |
开启以上三种数据导入性能优化后,集群的索引merge任务会增加,通过指定配置项“index.merge.scheduler.max_thread_count”可以降低索引merge任务开销对导入性能的影响。索引merge任务优化可以增加shard的合并线程数,减少合并对数据导入的限流。 |
约束限制
仅Elasticsearch 7.10.2集群和OpenSearch 1.3.6集群支持数据导入性能增强。
前提条件
待增强数据导入性能的集群处于“可用”状态。
Bulk路由优化
开启Bulk路由优化后(即“index.bulk_routing”设置为“pack”或“ocal_pack”),数据写入不再根据“_id”进行路由,与路由的相关功能使用会受限,例如根据“_id”进行文档GET请求可能失败。
- 在“集群管理”页面,选择可用的集群,单击操作列“Kibana”,登录Kibana界面。
- 在Kibana左侧导航栏,选择“Dev Tools”。
- 在“Dev Tools”页面,执行如下命令开启Bulk路由优化。
PUT my_index { "settings": { "index.bulk_routing": "local_pack" } }
配置项“index.bulk_routing”的取值范围如下所示。- “default”:缺省值,使用集群默认的路由机制,Bulk请求中的每一条记录会拆分后独立路由。
- “pack”:单个Bulk请求的数据会被随机路由到同一个shard中。
- “ocal_pack”:单个Bulk请求的数据会被路由到接收该Bulk请求的数据节点的本地shard中,如果该节点不包含对应index的shard,则会进行随机路由到其他包含该索引shard节点上。该方案依赖客户端Bulk请求的随机打散和主shard的均衡分布。
Bulk聚合优化
通过指定配置项“index.aggr_perf_batch_size”可以开启集群的Bulk聚合优化。Bulk聚合优化是通过批量导入将Bulk请求中的doc从单个依次写入变为批量写入,该方案可以有效减少内存申请、锁申请、及其他调用开销,从而提升数据导入性能。
- 在“集群管理”页面,选择可用的集群,单击操作列“Kibana”,登录Kibana界面。
- 在Kibana左侧导航栏,选择“Dev Tools”。
- 在“Dev Tools”页面,执行如下命令开启Bulk聚合优化。
PUT my_index { "settings": { "index.aggr_perf_batch_size": "128" } }
配置项“index.aggr_perf_batch_size”的取值范围为[1, Integer.MAX_VALUE]。缺省值为1,表示关闭Bulk聚合优化。当取值大于1时,表示打开Bulk聚合优化且批量取值为MIN(bulk_doc_size, aggr_perf_batch_size)。
文本索引加速
- 仅当开启文本索引加速(即“index.native_speed_up”设置为“true”)时,才支持开启分词加速(即“index.native_analyzer”设置为“true”),否则分词加速不生效。
- 包含“nested”字段的索引不支持开启文本索引加速。
- 在“集群管理”页面,选择可用的集群,单击操作列“Kibana”,登录Kibana界面。
- 在Kibana左侧导航栏,选择“Dev Tools”。
- 在“Dev Tools”页面,执行如下命令开启文本索引加速。
PUT my_index { "settings": { "index.native_speed_up": true, "index.native_analyzer": true } }
配置项“index.native_speed_up”和“index.native_analyzer”的取值范围是true和fales,缺省值是fales。
索引merge任务优化
开启以上三种数据导入性能优化后,集群的索引merge任务会增加,通过指定配置项“index.merge.scheduler.max_thread_count”可以降低索引merge任务开销对导入性能的影响。索引merge任务优化可以增加shard的合并线程数,减少合并对数据导入的限流。
- 在“集群管理”页面,选择可用的集群,单击操作列“Kibana”,登录Kibana界面。
- 在Kibana左侧导航栏,选择“Dev Tools”。
- 在“Dev Tools”页面,执行如下命令启动索引merge任务优化。
PUT my_index { "settings": { "index.merge.scheduler.max_thread_count": 8 } }
配置项“index.merge.scheduler.max_thread_count”的取值范围是[1, node.processors/2],缺省值是4,建议设置为8。