一個Elasticsearch節點會有多個線程池,但重要的是下面四個:
索引(index):主要是索引數據和刪除數據操作(默認是cached類型)
搜索(search):主要是獲取,統計和搜索操作(默認是cached類型)
批量操作(bulk):主要是對索引的批量操作(默認是cached類型)
更新(refresh):主要是更新操作(默認是cached類型)
可以通過給設置一個參數來改變線程池的類型(type),例如,把索引的線程池改成blocking類型:
- index:
- type: blocking
- min: 1
- size: 30
- wait_time: 30s
下面是三種可以設置的線程池的類型
cache
cache線程池是一個無限大小的線程池,如果有很請求的話都會創建很多線程,下面是個例子:
- index:
- type: cached
fixed
fixed線程池保持固定個數的線程來處理請求隊列。
size參數設置線程的個數,默認設置是cpu核心數的5倍
queue_size可以控制待處理請求隊列的大小。默認是設置爲-1,意味着無限制。當一個請求到來但隊列滿了的時候,reject_policy參數可以控制它的行爲。默認是abort,會使那個請求失敗。設置成caller會使該請求在io線程中執行。
- index:
- type: fixed
- size: 30
- queue: 1000
- reject_policy: caller
blocking
blocking線程池允許設置一個最小值(min,默認爲1)和線程池大小(size,默認爲cpu核心數的5倍)。它也有一個等待隊列,隊列的大小(queue_size )默認是1000,當這隊列滿了的時候。它會根據定好的等待時間(wait_time,默認是60秒)來調用io線程,如果沒有執行就會報錯。
- index:
- type: blocking
- min: 1
- size: 30
- wait_time: 30s