Подтвердить что ты не робот

Elasticsearch NodeBuilder vs TranportClient

Вероятно, очень простой (и немой) вопрос для других разработчиков elasticsearch, какая разница между этими двумя?

Я подключаюсь к удаленному серверу elasticsearch из Java webapp, до сих пор я использовал TransportClient, но мне было интересно, можно ли использовать NodeBuilder или NodeBuilder следует использовать только для встроенных клиентов?

Если какой-либо из двух может использоваться для подключения к удаленным ES-серверам, какой из них должен быть лучше с точки зрения памяти и производительности?

Если кто-то может указать мне на NodeBuilder, подключающийся к удаленному ES-серверу, это будет здорово, потому что мне не повезло найти его.

Спасибо.

4b9b3361

Ответ 1

NodeBuilder также может использоваться для подключения к кластеру.

Node node = nodeBuilder().clusterName("yourcluster").client(true).node();
Client client = node.client();

Он присоединится к кластеру как к другому node и будет знать всю топологию. Используя узлы, вы можете использовать многоадресную рассылку для обнаружения других запущенных узлов.

Мое мнение состоит в том, что я предпочитаю использовать TransportClient, чем NodeClient, потому что другие узлы кластера не будут получать бесполезную информацию при остановке TransportClient. Когда NodeClient останавливается, каждый node должен знать, что даже если им не нужно управлять им, поскольку он не содержит никаких данных. Кроме того, я видел в режиме отладки, что NodeClient запускает больше Threads, чем TransportCLient. Поэтому я считаю, что TransportClient имеет меньшую площадь памяти.

Кстати, если вы используете Spring, вы можете использовать spring-elasticsearch заводы. Если нет, вы всегда можете посмотреть исходный код, чтобы узнать, как я управляю NodeClient vs TransportClient.

Надеюсь, что это поможет.

EDIT 2016-03-09: NodeClient не следует использовать. Если это необходимо, люди должны создать клиент node (запустить elasticsearch node с помощью node.data: false и node.master: false) и использовать TransportClient для локального подключения к нему.

Ответ 2

Если я правильно понял документацию, полезно использовать Node Client, по крайней мере, если у вас есть осколки:

Преимущество использования клиента [ Node] заключается в том, что операции автоматически перенаправляется на node (ы), операции должны выполняться без выполнения "двойного прыжка". Например, индекс операция будет автоматически выполнена на осколке, что она закончится наверх.

против

Он [Транспортный клиент] не присоединяется к кластеру, но просто получает один или несколько начальных транспортными адресами и общается с ними круговым способом на каждом действии (хотя большинство действий, вероятно, будет "два прыжка", Операции).

Как я это интерпретирую, используя Node (желательно с клиентом, установленным в true), который присоединяется к кластеру, а затем использует Client на этом node, вы будете отправлять запросы непосредственно на правильный Node в кластере.

Используя TransportClient, вы подключаетесь к любому node, который затем перенаправляет (или, возможно, перенаправляет запрос, не уверен) запрос на правильный Node ( "два прыжка" )

Использование Node Клиент должен быть более эффективным с точки зрения сетевого трафика и загрузки узлов.

Ответ 3

Также люди должны знать, что клиент Node присоединяется к полному кластеру сетки, а также становится прокси-сервером, поэтому другие клиенты могут подключиться к нему, а также смогут подключаться к серверным плагинам, что необходимо учитывать при блокировке кластера.

Node клиент может использоваться для сбора рассеяния, чтобы он мог облегчить некоторую обработку с узлов данных.

Не уверен, что транспортный клиент также разбрасывает сборку.