Elasticsearch 寫入性能優化常見手段主要有以下 10 個方向,建議根據具體業務場景組合使用:
- 批量寫入優化
- 使用
_bulk
API 批量提交文檔 - 建議每批次 5-15MB 數據量
- 并發執行多個批量請求
- 索引配置調優
PUT /my_index
{"settings": {"index.refresh_interval": "30s", // 降低刷新頻率"index.number_of_replicas": 0, // 寫入時禁用副本"index.translog.durability": "async" // 異步translog}
}
- 硬件資源優化
- 使用 SSD 磁盤(IOPS 提升 10 倍+)
- 預留 50% 內存給文件系統緩存
- 設置合理的 JVM 堆內存(建議不超過 32GB)
- 文檔結構優化
- 避免嵌套文檔(Nested)類型
- 禁用不需要的字段索引
"my_field": { "type": "keyword","index": false // 不索引該字段
}
- 分片策略優化
- 單個分片大小控制在 20-50GB
- 分片數 = 節點數 × 1.5(寫入密集型場景)
- 使用 routing 路由寫入
- 線程池調整
thread_pool:write:size: 16 # 根據 CPU 核數調整queue_size: 1000
- 存儲優化
- 禁用 _source 字段(節省 30%+ 存儲)
PUT /my_index
{"_source": {"enabled": false}
}
- 合并策略優化
"index.merge.policy": {"max_merged_segment": "5gb","segments_per_tier": 10
}
- 集群架構優化
- 專用協調節點處理寫入請求
- 冷熱分離架構(Hot-Warm)
- 使用 Ingest Pipeline 預處理數據
- 監控與診斷
# 查看寫入延遲
GET _nodes/hot_threads# 監控 segment 狀態
GET /_cat/segments?v
典型優化效果對比:
優化項 | 默認配置 | 優化配置 | 吞吐提升 |
---|---|---|---|
批量寫入 | 單文檔 | 5MB批次 | 10x+ |
刷新間隔 | 1s | 30s | 3x |
副本數 | 1 | 0 | 2x |
線程池隊列 | 200 | 1000 | 5x |
注意事項:
- 日志類場景建議禁用副本,搜索類場景保留副本
- 調優后需持續監控 CPU/IO 使用率
- 定期執行 _forcemerge 減少 segment 數量
- 7.x+ 版本建議使用時序模式(Time Series)