2016-03-08 35 views
4

我已經通過官方文檔走在https://www.elastic.co/blog/found-interfacing-elasticsearch-picking-clientElasticSearch:玩笑VS休息VS TransportClient VS NodeClient

但它沒有給出任何基準或性能數據,以幫助客戶中進行選擇。我發現它不是微不足道的setup a TransportClientsetup a NodeClient,因爲它的文檔也很稀少,幾乎沒有任何例子。

所以如果有人已經在選擇客戶方面做了一些基準測試,我會非常感激,並且更多地關注調整已建立的客戶端,而不是評估要選擇的客戶端。

我們的應用程序是一個寫重應用程序,我們計劃有一個50碎片,50副本ES集羣

回答

2

所有這些客戶的罰款查詢,他們都有自己的優點和缺點(以下名單並不詳盡):

  • 一個Node client提供了一個單跳到集羣中,但因爲它也將成爲其中的一部分羣集也可能在羣集中引發太多的聊天
  • A Transport client不是羣集的一部分,因此需要雙跳往返,並且以循環方式一次與單個節點通信(從列表中提供)
  • Jest基本上是missing client ES REST接口
  • 如果您覺得您不需要Jest所提供的全部內容,並且只想與少數端點進行交互,那麼您還可以使用Spring REST模板Apache創建自己的REST客戶端HTTP等

如果你打算寫一個沉重的應用程序,我建議你甚至不使用任何這些客戶端。主要原因是它們全都是同步性質,並且如果您的架構或網絡的任何組件由於某種原因失敗,那麼您將丟失數據,並且這可能不適合您。

如果你有大量的數據需要攝取,你通常採用異步方式,即將數據存儲在臨時(但持久)隊列(Kafka,Redis,JMS等)中,然後讓另一個進程將其傳輸到ES 。有很多方法可以做到這一點,但一個非常簡單的方法是使用Logstash

無論您決定將數據存儲在Kafka或JMS或Redis中,然後您可以讓Logstash使用您的數據並將其傳輸到ES,即讓Logstash擔心寫入過多的部分,這很不錯。可以很容易地與

通過這種經過良好調整的設置,您可以處理非常繁重的寫入負載,而無需擔心要使用哪個客戶端以及如何調整它。儘管如此,這個問題仍然是開放的,但是由於寫入部分對您來說至關重要,您需要使其變得堅實,唯一嚴肅的方法是通過異步操作並讓一個經過良好開發和測試的ETL(如Logstash,或流利等)爲你做。

UPDATE

值得注意的是,隨着ES 5.0,將會有一個新的Java REST client可用。

+0

謝謝Val!我們的數據實際上是躺在卡夫卡的,我們需要把它放在風暴中。 Logstash確實看起來非常有吸引力,但一些同事報告寫入吞吐量非常低,同時也抱怨這是非常耗費資源的。我們沒有任何大的轉變。只需1或2個字符串操作。 – user2250246

+0

在2.2版本(性能方面),Logstash已經[完成更新](https://www.elastic.co/blog/upgrade-guide-for-logstash-2-2),你應該再試一次。 – Val

+0

謝謝!我會試一試。 – user2250246

相關問題