全部產品
Search
文件中心

Elasticsearch:使用bulk彙總外掛程式(faster-bulk)

更新時間:Jun 30, 2024

faster-bulk外掛程式是Elasticsearch團隊自研的外掛程式,目的是為了提高寫入吞吐和降低寫入拒絕。該外掛程式能夠實現將bulk寫入請求按照指定bulk請求大小和時間間隔進行批量彙總,防止過小的bulk請求阻塞寫入隊列,有效提升寫入吞吐。本文介紹faster-bulk外掛程式的適用情境和使用方法。

適用情境

faster-bulk外掛程式適用於寫入吞吐高、索引分區數多的情境,實測對這類情境寫入吞吐提升20%以上,能有效降低寫入拒絕,測試說明如下。
重要 faster-bulk實現的本質是對bulk寫入請求進行批量彙總後再寫入shard,因此建議不要在寫入延時要求較高的情境中使用。
  • 測試環境
    • 節點:3 * 16核64 GB資料節點 + 2 * 16核64 GB獨立協調節點。
    • 資料集:esrally官方資料集nyc-taxis,單文檔大小為650位元組。
    • 參數:apack.fasterbulk.combine.interval設定為200ms
    • translog狀態:分別對translog在同步及非同步狀態進行測試。
  • 測試結果
    translog狀態寫入效能(原生叢集,未使用faster-bulk外掛程式)寫入效能(阿里雲叢集,使用faster-bulk外掛程式)效能提升
    同步狀態182314/s226242/s23%
    非同步狀態218732/s241060/s10%
  • 結論

    由實驗資料對比可得,使用faster-bulk外掛程式後,translog同步或非同步狀態下寫入效能均有所提升,同步狀態(預設)下寫入效能提升了23%。

前提條件

您已完成以下操作:

  • 建立Elasticsearch執行個體,版本為6.7.0或7.10.0。
    具體操作步驟請參見建立Elasticsearch執行個體
    說明 faster-bulk外掛程式目前僅支援Elasticsearch 6.7.0和7.10.0版本(商業版和增強版)。
  • 安裝faster-bulk外掛程式。

    具體操作步驟請參見安裝或卸載系統預設外掛程式。外掛程式安裝後,bulk彙總功能預設關閉,使用前需要先開啟該功能。

開啟bulk彙總功能

  1. 登入Elasticsearch執行個體的Kibana控制台。
    具體操作步驟請參見登入Kibana控制台
  2. 在左側導覽列,單擊Dev Tools
  3. Console中,執行以下命令,開啟bulk彙總功能。
    PUT _cluster/settings
    {
       "transient" : {
          "apack.fasterbulk.combine.enabled":"true"
       }
    }
    說明 您也可以通過curl命令或第三方可視化外掛程式執行以上命令。

設定bulk彙總大小和時間間隔

執行以下命令,指定bulk請求的彙總大小和時間間隔。當單個資料節點上,bulk請求的累計大小或彙總時間間隔達到閾值,即會觸發資料寫入。
PUT _cluster/settings
{
   "transient" : {
      "apack.fasterbulk.combine.flush_threshold_size":"1mb",
      "apack.fasterbulk.combine.interval":"50"
   }
}
  • apack.fasterbulk.combine.flush_threshold_size:彙總的bulk請求的最大值,預設值為1mb
  • apack.fasterbulk.combine.interval:彙總的bulk請求的最大時間間隔,單位為ms,預設值為50
說明 對于海量資料高並發情境,在叢集可承受的壓力範圍內,可適當將最大彙總大小或最大時間間隔調大,減少bulk請求阻塞寫入隊列。

定向路由

當批量寫入文檔未指定routing和主鍵(_id)時,您可以為叢集或指定索引開啟定向路由,提高寫入速度。
說明 如果叢集或索引開啟了定向路由,同時寫入中也指定了routing和主鍵(_id),那麼定向路由不會生效,且不會影響正常的業務寫入。
  • 為叢集開啟定向路由
    PUT _cluster/settings
    {
      "persistent" : {
        "index.direct_routing.global.enable" : "true"
      }
    }
  • 為指定索引開啟定向路由
    PUT index/settings
    {
      "index.direct_routing.enable" : "true"
    }

關閉bulk彙總功能

執行以下命令,關閉bulk彙總功能。
PUT _cluster/settings
{
   "transient" : {
      "apack.fasterbulk.combine.enabled":"false"
   }
}