RemoteTransportException [[Death] [inet [/172.18.0.9:9300]] [bulk / shard]]; 嵌套:EsRejectedExecutionException [在org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction$1@12ae9af上拒绝执行(队列容量50)];
这是否意味着我一次要在一个批量中进行太多操作,或者在一个连续的时间内进行太多操作?是否有我应该增加的设置或应该做不同的事情?
一个线程建议“由于最近的默认设置,我认为您需要增加’threadpool.bulk.queue_size’(可能还有’threadpool.index.queue_size’)设置。” 但是,我不想在不了解故障的情况下随意增加设置。
您要增加线程池中可用的大容量线程数。ES在几个命名池中预留了线程以用于各种任务。这些池有一些设置。类型,大小和队列大小。
从文档:
queue_size允许控制没有线程执行的挂起请求的队列大小。默认情况下,它设置为-1表示无边界。当请求进入并且队列已满时,它将中止请求。
对我来说,这意味着与当前队列大小相比,有更多的大容量请求排队等待池中的线程执行其中一个。该文档似乎表明队列大小默认为-1(上面的文本表示)和50(文档中的批量调用表示)。您可以看一下消息来源,以确保您使用的是es版本,或者设置更高的数字,以查看批量问题是否消失了。
ES线程池设置doco