2014-10-20 6 views
5

Ich mag mehrere Massenoperationsanforderungen an Elasticsearch Cluster schicken, und ich komme über dieses Thema EsRejectedExecutionException[rejected execution (queue capacity 50) on org.elasticsearch.action.support.replication.TransportShardReplicationOperationActionWie viele gleichzeitige Anfragen kann ich an den ElasticSearch-Cluster senden?

Ich habe eine Gruppe von 4 Elasticsearch Instanzen (Version 1.3.4), wenn ich diese Anfrage gesendet, um die Anzahl der bekommen seine Masse Betrieb Threadpoolgröße:

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

ich habe

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

So wie viele gleichzeitige Massenbetrieb Anfragen, die ich zu diesem Cluster senden kann? 50 or 200?

+1

Ich schlage vor, dass Sie einen Auslastungstester wie Tsung verwenden, um zu wissen, wie viele Anforderungen Ihr Cluster verarbeiten kann. – eliasah

Antwort

4

Ich würde vorschlagen, einen Blick auf this section from the documentation.

Sie müssen auch genauer sein, wenn Sie "gleichzeitige Anfragen, die Sie senden können" sagen, weil, wie Sie auf der obigen Seite sehen, gibt es verschiedene Thread-Pools, die verschiedene Jobs behandeln. Sie geben in Ihrem Beitrag ein Beispiel für "Massen" -Operationen.

Meiner Meinung nach ist die richtige Anfrage für "bulk", um die Anzahl der gleichzeitig laufenden Threads zu sehen (wie this piece of documentation) GET /_cat/thread_pool?v&h=host,bulk.queueSize,bulk.min,bulk.max. So haben Sie bulk.max aktive Threads im Thread-Pool mit einer bulk.queueSize Anzahl von Aufgaben in der Warteschlange dafür erlaubt. Wenn eine Anfrage eingeht und keine Threads dafür vorhanden sind, wird die Anfrage in die Warteschlange gestellt, um zu warten.

+0

Andrei: Ich sende Bulk-Operationen an ElasticSearch und bekam den Fehler EsRecuredExecutionException [Abgewiesene Ausführung (Warteschlangenkapazität 50) auf org. elasticsearch.action.support.replication.Trans[email protected]5bf40589]; Also entscheide ich mich, zuerst seine Kapazität zu überprüfen und dann die Bulk-Operation-Anfrage zu senden. Also in meinem Fall, wie viele Massenanforderung kann ich an den Cluster machen? 50 oder 200? –

+1

Das ist komplizierter als das. Eine Massenanforderung wird in kleinere Abschnitte aufgeteilt, die für jeden Shard spezifisch sind (Operationen, die in diesen bestimmten Shard gehen sollen), und ein Knoten kann mehr als einen Shard enthalten. Selbst wenn Sie eine Anforderung an einen Knoten stellen, wird diese Anforderung in separate Abschnitte aufgeteilt, und jeder Knoten, der einen an _bulk beteiligten Shard enthält, stellt 0, 1 oder mehrere kleinere Anforderungen im _bulk-Threadpool in eine Warteschlange. Wenn Sie zum Beispiel auf einem Knoten 5 Shards haben und jede von dem ursprünglichen _bulk-Vorgang Operationen ausführen muss, dann haben Sie in der Thread-Pool-Warteschlange +5 belegte "Slots". –

+0

Eigentlich habe ich die Gleichung für meinen Fall herausgefunden: aktiv + queue

Verwandte Themen