1. 程式人生 > >ElasticSearch寫入效能優化

ElasticSearch寫入效能優化

背景:

  1. ES讀取檔案入庫速度比其它系統寫檔案速度慢,導致檔案大量堆積
  2. 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