According to the default routing rule of Elasticsearch, data in a bulk request is routed to different shards. When massive data is written and a large number of index shards exist, excessive internal requests forwarding may trigger bulk rejection. In a large-scale cluster, the long tail effect causes a high bulk request latency.
You can specify the index.bulk_routing configuration item to enable bulk route optimization. This function reduces the requests that need to be internally forwarded. For clusters containing a large number of shards, this function can improve write performance and reduce bulk rejection.
PUT my_index { "settings": { "index.bulk_routing": "local_pack" } }
Value |
Description |
---|---|
default |
The default routing mechanism of Elasticsearch is used. Records in a bulk request are split and routed independently. |
pack |
Data of a single bulk request is randomly routed to the same shard. |
local_pack |
The data of a single bulk request is routed to the local shard of the data node that receives the bulk request. If the node does not contain the corresponding index shard, the data is randomly routed to another node that contains the index shard. |