2014-10-20 94 views
5

我想多個批量操作請求發送到ElasticSearch羣集,我碰到過這樣的問題EsRejectedExecutionException[rejected execution (queue capacity 50) on org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction我可以向ElasticSearch羣集發送多少個同步請求?

我有4個ElasticSearch實例(版本1.3.4),當我發出這個請求得到的數量的集羣它的批量操作線程池的大小:

GET /_cat/thread_pool?v&h=host,bulk.active,bulk.queueSize 

host bulk.active bulk.queueSize 
1D4HPY1   0    50 
1D4HPY2   0    50 
1D4HPY3   0    50 
1D4HPY4   0    50 

那麼有多少同時批量操作請求,我可以發送給該集羣? 50 or 200

+1

我建議你使用負載測試程序如Tsung來知道你的集羣可以處理多少請求 – eliasah 2014-10-20 15:14:52

回答

4

我建議在看看this section from the documentation

此外,你需要的時候,你說是因爲,當你在網頁見上,有處理各種不同的工作線程池「您可以發送同時請求」更具體。你在你的文章中舉一個例子來說明「批量」操作。

在我看來,看到同時運行的線程數(按照this piece of documentation)的「bulk」的正確請求是GET /_cat/thread_pool?v&h=host,bulk.queueSize,bulk.min,bulk.max。因此,線程池中允許有bulk.max活動線程,其隊列中有bulk.queueSize個任務。當一個請求進入並且沒有線程來處理它時,該請求被放入隊列中等待。

+0

Andrei:我實際上向ElasticSearch發送了批量操作,並且得到了這個錯誤EsRejectedExecutionException [org上的拒絕執行(隊列容量50)。 elasticsearch.action.support.replication.Trans[email protected]5bf40589]; 因此,我決定首先檢查其容量,然後發送批量操作請求。 所以在我的情況下,我可以對羣集提出多少批量請求? 50或200? – 2014-10-21 03:10:05

+1

這比這更復雜。批量請求將被拆分爲特定於每個分片的更小的塊(應該進入該特定分片的操作),並且節點可以容納多個分片。因此,即使您向一個節點發出請求,該請求也會被拆分爲不同的塊,並且每個包含_bulk中涉及的碎片的節點將在_bulk線程池中排隊0個,1個或更多個較小的請求。例如,如果在一個節點上有5個碎片,並且每個碎片都有從初始_bulk操作執行的操作,那麼在線程池隊列中,將有+5個「槽」佔用。 – 2014-10-21 07:56:06

+0

其實我想通了方程我的情況: 主動+隊列 2014-10-21 08:27:59