threadpool.bulk.size sert à indique combien de requêtes de type BULK elasticsearch peut traiter en parallèle. Quelque soit le nombre d'opération à l'intérieur de chaque requête de type bulk.
Mais si je n'y touche pas et que je tente d'insérer 50000 documents via ce type d'algo, j’obtiens des myriades d'erreurs de type :
EsRejectedExecutionException[rejected execution (queue capacity 100) on org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$PrimaryPhase$1@3b031126]
// initialisation du bulkProcessor
bulkProcessor = BulkProcessor.builder(client, new BulkProcessor.Listener() {
@Override
public void beforeBulk(long executionId, BulkRequest request) {
}
@Override
public void afterBulk(long executionId, BulkRequest request, BulkResponse response) {
if (response.hasFailures()) {
for (BulkItemResponse item : response.getItems()) {
LOGGER.error("Processing to index \"{}\" with type \"{}\" failed for entity id {} with message {}", item.getIndex(), item.getType(), item.getId(), item.getFailureMessage());
LOGGER.error(response.buildFailureMessage());
}
}
@Override
public void afterBulk(long executionId, BulkRequest request, Throwable afterBulk)
{
LOGGER.error("Error while index in ELS failure:"+afterBulk.getMessage(), afterBulk);
}
}).setBulkActions(5000).setConcurrentRequests(1).build();
// Exécution de N fois ce code (autant de fois que j'aurais d'enregistrement à insérer)
bulkProcessor.add(new IndexRequest(table, type).source(jsonBuilder()
.startObject()
.field(CODE,(intCode != null ? intCode.toString() : strCode))
.field(HASH, newHash)
.field(TEXT, text)
.endObject()));
Y aurait il quelque chose de déconnant dans ce code ?
J'ai laissé tout par défaut sinon. Pour l'instant 1 serveur Elastic avec 12 indexes et dans chaque index une dizaines de types. Donc à priori il y a un seul replica.
si tu indexes dans un seul index à la fois, ça ne devrait pas poser de pb mais si effectivement tu surcharges ta machine en indexant partout, tu risques d'avoir ce genre d'erreur.
Si tu n'as pas besoin de 5 shards par index, commence par réduire ça en 1 shard.
30 shards sur une machine me semble plus raisonnable.
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.