2013-03-14 58 views
22

對其他彈性搜索開發者來說,這可能是一個非常簡單(和愚蠢)的問題,這兩者之間有什麼區別?elasticsearch NodeBuilder vs TranportClient

我從Java Web應用程序連接到遠程elasticsearch服務器,到目前爲止我一直在使用TransportClient,但我想知道NodeBuilder是否可以使用,或者NodeBuilder應該只用於嵌入式客戶端?

如果兩者中的任何一個可以用於連接到遠程ES服務器,哪一個應該在內存和性能方面更好?

如果任何人都可以將我指向一個連接到遠程ES服務器的NodeBuilder,那麼這個例子會很棒,因爲我沒有找到幸運的東西。

謝謝。

+1

看看這裏:http://blog.trifork.com/2012/09/13/elasticsearch-beyond-big-data-running-elasticsearch-embedded/並在[elasticsearch文檔】(HTTP:/ /www.elasticsearch.org/guide/reference/java-api/client.html),其中的區別很好解釋。 – javanna 2013-03-14 10:45:20

回答

28

NodeBuilder也可用於連接到羣集。

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

它將加入羣集作爲另一個節點,並將知道整個拓撲。使用節點,您可以使用多播來發現其他正在運行的節點。

我的意見是,我傾向於使用TransportClient而不是NodeClient,因爲當TransportClient停止時,其他羣集節點不會收到無用的信息。當一個NodeClient停止時,每個節點必須知道即使它們不需要管理它,因爲它不包含任何數據。 另外,我在調試模式下看到NodeClient比TransportCLient啓動更多Threads。所以我認爲TransportClient具有較小的內存佔用。

順便說一下,如果您使用的是Spring,那麼您可以使用spring-elasticsearch工廠。如果沒有,您可以始終查看源代碼以瞭解我如何管理NodeClient與TransportClient。

希望這會有所幫助。

編輯2016-03-09NodeClient不應該使用。如果需要的話,人們應該創建一個客戶端節點(使用node.data: falsenode.master: false啓動elasticsearch節點),並使用TransportClient在本地連接它。

+0

非常感謝!這正是我一直在尋找的答案! – im8bit 2013-03-14 14:58:09

+0

能否請您解釋一下2016-03-09的編輯?創建單獨節點而不是使用'NodeClient'的原因是什麼? – rapstacke 2016-03-29 11:04:16

+0

肯定:https://github.com/elastic/elasticsearch/issues/15383 – dadoonet 2016-03-29 11:13:16

18

如果我理解文檔正確的,這有利於使用節點客戶端,至少如果你有碎片:

使用[節點]客戶端的優點是,操作 自動路由到節點需要執行操作 ,而不執行「雙跳」。例如,指數 將在分片上自動執行,它將結束 上的現有值。

VS

它[交通運輸客戶端]不加入羣集,而只是獲得一個或多個初始 傳輸地址,並與他們在循環方式 每個動作通信(儘管大多數行動將可能是「兩跳」 操作)。

正如我解釋這一點,使用節點(最好用客戶端設置爲true)加入羣集,然後使用客戶端節點上,您將直接發送請求到集羣中正確的節點。

使用TransportClient,你會連接到任何節點,然後將重定向(或可能轉發請求,不知道)的要求,以正確的節點(「兩級跳」)

使用節點客戶端應在網絡流量和節點負載方面更高效。

0

而且人都應該知道節點客戶端加入了全網狀集羣,也成爲一個代理,以便其他客戶端可以連接到它,以及也能服務器插件的網站,一些鎖定關閉羣集時要考慮的。

節點客戶端可以用來分散收集,因此它可以減輕數據節點的一些處理。

不確定傳輸客戶端是否也分散收集。

相關問題