RemoteTransportException [[死亡] [INET [/172.18.0.9:9300] [散装/碎片]]; 嵌套:EsRejectedExecutionException [在org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction$1@12ae9af]上被拒绝执行(队列容量50);
这是否意味着我一次在一个批量中进行太多操作,或连续出现太多批量,或者是什么?有没有我应该增加的设置或我应该做的不同的事情?
一个帖子暗示"我认为你需要增加你的'threadpool.bulk.queue_size'(以及可能'threadpool.index.queue_size')设置,因为最近的默认设置." 但是,我不想在不了解故障的情况下任意增加设置.
小智 37
我缺乏回复评论作为评论的声誉.
它并不完全是批量请求的数量,它实际上是批量调用将在给定节点上更新的分片总数.这意味着批量请求中实际批量操作的内容实际上很重要.例如,如果您有一个单个节点,具有单个索引,在8核心框上运行,具有60个分片,并且您发出的批量请求具有影响所有60个分片的索引操作,那么您将收到此错误消息批量请求.
如果有人想要改变这一点,你可以在评论"查看所有请求并创建ShardId"附近的org.elasticsearch.action.bulk.TransportBulkAction.executeBulk()内部看到分裂.个别请求在版本1.2.1的第293行附近发生了几行.
小智 6
elasticsearch 1.3.4
我们的系统8核心*2
每个批量工作者每1分钟插入300,000条消息=>每秒20,000
我也是那个例外!然后设置配置
elasticsearch.yml
threadpool.bulk.type: fixed
threadpool.bulk.size: 8 # availableProcessors
threadpool.bulk.queue_size: 500
source
BulkRequestBuilder bulkRequest = es.getClient().prepareBulk();
bulkRequest.setReplicationType (ReplicationType.ASYNC).setConsistencyLevel(WriteConsistencyLevel.ONE);
loop begin
bulkRequest.add(es.getClient().prepareIndex(esIndexName, esTypeName).setSource(document.getBytes ("UTF-8")));
loop end
BulkResponse bulkResponse = bulkRequest.execute().actionGet();
Run Code Online (Sandbox Code Playgroud)
4core => bulk.size 4
然后没有错误
归档时间: |
|
查看次数: |
33608 次 |
最近记录: |