
# 导入性能增强
在日志分析、实时监控等大规模数据接入场景下，随着索引分片（Shard）增加和写入吞吐量的提升，传统的Elasticsearch路由机制会产生大量内部转发请求，导致写入拒绝（Write Rejection）和长尾延迟。为了解决这些问题，CSS服务提供了数据导入性能增强功能，通过Bulk路由优化、Bulk聚合优化、文本索引加速及Merge任务优化，有效降低系统开销，在高负载场景下可显著提升数据写入的稳定性与吞吐率。
#### 功能介绍
为了平衡性能与功能，CSS服务提供了四个维度的导入性能增强优化方案。其核心原理在于通过"减少跨节点通信"与"提升底层索引构建效率"来突破性能瓶颈。
表1优化方案介绍 
| 优化方案      | 功能描述                                                                                                                                                  | 适用场景                                                                                                                          | 相关文档                                                              |
|:---|:---|:---|:---|
| Bulk路由优化  | Bulk路由优化可以减少跨节点网络通信，降低协调节点的转发负载，防止写入拒绝。 原理：通过改变默认的ID散列路由，将同一个Bulk请求内的多条文档强制路由到同一个分片（Shard）或本地节点处理。    | 适用于分片数较多、集群规模较大的场景。特别是在Bulk请求吞吐极高，导致协调节点网络IO或CPU满载时效果显著。                  | [配置Bulk路由优化] |
| Bulk聚合优化  | Bulk聚合优化可以降低系统调用开销，提升单点处理能力，减少写入时的资源锁竞争。 原理：在节点内部将Bulk请求中的文档由"逐条处理"转变为"批量处理"，有效减少了内存申请频率和锁竞争。           | 适用于超高并发写入、追求吞吐量的场景。当监控显示CPU在内核态耗时较高或存在明显的内存分配压力时建议开启。                                                                         | [配置Bulk聚合优化] |
| 文本索引加速    | 文本索引加速可以极速构建文本索引，大幅缩短text和keyword字段的索引处理耗时。 原理：通过优化索引流程以及内存使用等方式，并结合分词加速，提升文本数据的处理效率。                  | 适用于对索引构建速度要求极高且分词逻辑简单的场景。例如，日志审计、全文检索等包含大量text或keyword字段的业务。                                                                  | [配置文本索引加速]  |
| Merge任务优化 | Merge任务优化可以保障写入稳定性，防止因段合并（Merge）过慢导致的写入流控（Throttling）。 原理：通过动态增加索引分片的合并线程数，加速底层小Segment的合并过程，释放写入缓冲区空间。 | 适用于持续高频写入的场景。特别是开启前三种优化导致写入速度激增后，如果监控中出现"Merge Throttling"导致的写入波动，需同步开启此项。  | [优化索引Merge策略] |
   
#### 约束限制
Elasticsearch集群仅7.10.2版本支持数据导入性能增强功能。
#### 登录Kibana
登录Kibana进入命令执行页面。Elasticsearch集群支持多种客户端访问，本文仅以CSS服务集成的Kibana为例介绍配置指导。
1. 登录[云搜索服务管理控制台](https://console.huaweicloud.com/elasticsearch/)。
2. 在左侧导航栏，选择"集群管理 \> Elasticsearch"。
3. 在集群列表，选择目标集群，单击操作列的"Kibana"，登录Kibana。
4. 在Kibana左侧导航栏选择"Dev Tools"，进入操作页面。 控制台左侧是命令输入框，其右侧的三角形图标为执行按钮，右侧区域则显示执行结果。
   
 
 #### 配置Bulk路由优化
![](https://support.huaweicloud.com/usermanual-css/public_sys-resources/caution_3.0-zh-cn.png)
开启Bulk路由优化后（即"index.bulk_routing"设置为"pack"或"local_pack"），文档写入不再按ID路由。因此，路由功能可能会受限，例如根据"_id"进行GET查询可能会因无法准确定位分片而导致失败。
启用Bulk路由优化，通过改变路由策略，减少接收请求的节点转发压力。
```
PUT /{index_name}/_settings
{
  "index.bulk_routing": "local_pack"
}
```
表2Bulk路由优化的参数说明 
| 参数                 | 类型     | 默认值     | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
|:---|:---|:---|:---|
| index_name         | String | 无       | 指定索引名称。 - 单个索引：直接输入索引名称（如"my_index"）。  - 多个索引：用英文逗号分隔多个索引（如"my_index1,my_index2"）。  - 通配符：支持通配符 \*（匹配任意字符），如"myindex\*"表示匹配所有以myindex开头的索引。   |
| index.bulk_routing | String | default | 指定路由策略，控制集群在处理Bulk批量写入请求时的内部路由策略。 - default：默认路由策略。Bulk请求中的每一条记录都会根据其"_id"进行独立散列（Hash）并路由。数据会均匀分布在所有分片上，但在大规模Bulk写入时会产生大量的跨节点内部转发。  - pack：批次随机打包策略。将单个Bulk请求中的所有数据视为一个整体，随机选择一个目标分片进行存储。该模式消除了单个请求内部的散列计算和跨节点分发，大幅降低了接收请求的节点压力。  - local_pack（推荐）：本地优先打包策略。将单个Bulk请求中的所有数据路由到接收该请求的数据节点所持有的本地分片中。如果该节点上没有对应索引的分片，则退化为pack模式。这是推荐选项，因为它实现了"零跨节点转发"。                                    |
   
 #### 配置Bulk聚合优化
启用Bulk聚合优化，通过在节点内部实现"小批次变大批次"的处理，显著降低超高并发写入下的CPU损耗和锁竞争。
```
PUT /{index_name}/_settings
{
  "index.aggr_perf_batch_size": "128"
}
```
表3Bulk聚合优化的参数说明 
| 参数                         | 类型      | 默认值 | 说明                                                                                                                                                                                                                                                                                                                                                                                                |
|:---|:---|:---|:---|
| index.aggr_perf_batch_size | Integer | 1   | 指定Bulk聚合的文档上限。 最小值：1（关闭Bulk聚合优化，文档逐条处理） 推荐值：128 当取值大于1时，表示开启Bulk聚合优化。系统会将Bulk请求中的文档进行"内部再聚合"。该值设置的越大，单次批量处理占用的内存也会相应增加，建议根据实际业务需求和系统资源情况合理设置该参数。 实际执行的聚合批次大小为：MIN(当前Bulk请求中的文档数, aggr_perf_batch_size) |
   
 #### 配置文本索引加速
![](https://support.huaweicloud.com/usermanual-css/public_sys-resources/caution_3.0-zh-cn.png)
当索引Mapping中包含nested（嵌套类型）字段，则不支持启用文本索引加速。系统会因兼容性限制而无法启动加速。
启用文本索引加速，提升text和keyword类型字段的索引效率。
```
PUT /{index_name}/_settings
{
  "index.native_speed_up": true,
  "index.native_analyzer": true
}
```
表4文本索引加速的参数说明 
| 参数                    | 类型      | 默认值   | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
|:---|:---|:---|:---|
| index.native_speed_up | Boolean | false | 是否开启文本索引加速。 取值范围： - true：开启文本索引加速。显著提升text和keyword字段的写入速度，优化索引期间的内存使用率，降低因频繁写入引起的GC频率。  - false：关闭文本索引加速。                                                                                    |
| index.native_analyzer | Boolean | false | 是否开启分词加速。 仅当"index.native_speed_up"为"true"时，该参数才生效，且仅对text类型字段生效。 取值范围： - true：开启分词加速。在保证分词效果一致的前提下，大幅降低CPU在分词阶段的耗时。  - false：关闭分词加速。   |
   
 #### 优化索引Merge策略
优化索引Merge策略，防止因写入过快导致Segment过多，通过增加合并线程确保写入流程不被限流。
```
PUT /{index_name}/_settings
{
  "index.merge.scheduler.max_thread_count": 8
}
```
表5索引Merge策略的参数说明 
| 参数                                     | 类型      | 默认值 | 说明                                                                                                                                                                                                                 |
|:---|:---|:---|:---|
| index.merge.scheduler.max_thread_count | Integer | 4   | 指定单个Shard中同时进行段合并的最大线程数。 取值范围：1\~（节点CPU核数/2） 建议设置为8，能有效利用多核CPU性能加速合并，消除由于Merge慢导致的写入波动，但需确保节点CPU核数足够，避免因线程数过多导致系统资源争用。 |
   
