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