2014-10-20 95 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