The existing TransportClient has been part of Elasticsearch since its very first commit.
It is a special client as it uses the transport protocol to communicate with Elasticsearch,
which causes compatibility problems if the client is not on the same version as the
Elasticsearch instances it talks to.

We released a low-level REST client in 2016, which is based on the well known Apache HTTP
client and it allows to communicate with an Elasticsearch cluster in any version using HTTP.
On top of that we released the high-level REST client which is based on the low-level client
but takes care of request marshalling and response un-marshalling.