With Elasticsearch 6.x, the Elasticsearch team has provided a custom low-level HTTP client to communicate with Elasticsearch. Its main features are as follows:
- Minimal dependencies
- Load balancing across all available nodes
- Failover in the case of node failures and upon specific response codes
- Failed connection penalization (whether a failed node is retried depends on how many consecutive times it failed; the more failed attempts, the longer the client will wait before trying that same node again)
- Persistent connections
- Trace logging of requests and responses
- Optional automatic discovery of cluster nodes