ElasticSearch寫入效能優化
背景:
- ES讀取檔案入庫速度比其它系統寫檔案速度慢,導致檔案大量堆積
- ES入庫方式採取:python呼叫ElasticSearch的bulk介面實現資料的批量插入
嘗試的優化方案
方案一
建立更多的python子程序去讀取檔案
方案二
將讀寫的檔案目錄掛載記憶體檔案系統
方案三
修改ElasticSearch的配置檔案ElasticSearch.yml(Elasticsearch的配置檔案在/etc/elasticsearch/)
1. 匯入大量資料 index.refresh_interval: 30
2. 去掉副本 index.number_of_replicas: 0
3. 機械硬碟併發訪問問題index.merge.scheduler.max_thread_count: 1
4. 如果系統可以接受一定機率的資料丟失,調整 translog 持久化策略為週期性和一定大小的時候 flush:
* index.translog.durability: async
* index.translog.sync_interval: 120s
* index.translog.flush_threshold_size: 1024mb
* index.translog.flush_threshold_period: 120m
方案四
修改ElasticSearch.yml配置檔案
bootstrap.mlockall:true
設定為true來鎖住記憶體。
因為當jvm開始swapping時es的效率會降低,所以要保證它不swap。
[root@timeserver ~]# vim /etc/sysctl.conf
# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 4294967296
vm.swappiness=10
[root@timeserver ~]# sysctl -p
方案五
用效能更好的硬體
用ssd替換機械硬碟,可取消ElasticSearch.yml裡關於機械硬碟併發訪問的修改
關於cpu有大佬測試資料如下:
2650的 CPU 上壓了一下寫入效能,2.5k,70個欄位的 doc 可以跑到4.5w/s
相同的資料,2430只能跑到1.3w/s
方案六
檔案屬性特徵的影響
對於每個欄位如果都使用分詞外掛去做語義分析,也會大量消耗cpu