全部產品
Search
文件中心

Elasticsearch:使用aliyun-codec外掛程式

更新時間:Jun 30, 2024

aliyun-codec外掛程式是阿里雲自主開發的索引壓縮外掛程式,可以對Elasticsearch(ES)底層多種索引檔案進行壓縮,同時支援source_reuse_doc_values特性。適用於寫入量大、索引儲存成本高的情境,例如日誌情境、時序分析情境等,可以大幅降低索引的儲存成本。

背景資訊

aliyun-codec外掛程式支援多種壓縮演算法,同時支援source_reuse_doc_values特性。本文介紹如何使用aliyun-codec外掛程式,包括:

aliyun-codec外掛程式的效能測試資訊如下:

  • 測試環境

    • 資料集:使用Elasticsearch線上主日誌。

    • 資料大小:單個index,索引大小為1.2 TB,22個shard。

    • 索引配置:開啟行存(source)、列存(docvalue)和倒排(postings)壓縮,都使用zstd壓縮演算法。

  • 測試結果

    • 使用aliyun-codec外掛程式,開啟索引壓縮後,與未開啟索引壓縮特性的叢集相比:

      • 寫入速率:不變。

      • 索引整體大小:降低了40%。

      • I/O密集型查詢情境延遲:降低了50%。

    • 使用aliyun-codec外掛程式,開啟source_reuse_doc_values特性後,與未開啟該特性的叢集相比:

      • 寫入速率:不變。

      • 索引整體大小:最多可降低40%。降低百分比與索引中開啟source_reuse_doc_values特性的欄位的比例相關。

      • I/O密集型查詢情境延遲:與索引中開啟source_reuse_doc_values特性的欄位的比例、節點磁碟類型等因素有關,具體以實際測試為準。

前提條件

  • 建立Elasticsearch執行個體,版本為7.10.0。

    具體操作,請參見建立Elasticsearch執行個體

  • 根據業務情境,升級執行個體的核心版本:

    • 如果您僅需要對索引檔案進行壓縮:將核心版本升級至1.5.0及以上版本。

    • 如果您不僅需要對索引檔案進行壓縮,還需要使用source_reuse_doc_values特性:將核心版本升級至1.6.0及以上。

    升級核心版本的具體操作請參見升級版本

  • 安裝aliyun-codec外掛程式(7.10版本執行個體預設已安裝)。

    您可在外掛程式配置頁面查看是否已安裝aliyun-codec外掛程式。如果還未安裝,請手動進行安裝,安裝方法請參見安裝或卸載系統預設外掛程式

使用限制

  • 僅執行個體版本為7.10.0,且核心版本為1.5.0及以上的Elasticsearch執行個體,支援aliyun-codec外掛程式的索引壓縮功能。6.7.0版本執行個體請使用codec-compression外掛程式,詳細資料請參見使用索引壓縮外掛程式beta版本(codec-compression)

  • 僅執行個體版本為7.10.0,且核心版本為1.6.0及以上的Elasticsearch執行個體支援source_reuse_doc_values特性,且日誌情境化模板(aliyun_default_index_template )預設開啟壓縮,即"index.codec" : true

使用索引壓縮功能

  1. 登入目標Elasticsearch執行個體的Kibana控制台,根據頁面提示進入Kibana首頁。
    登入Kibana控制台的具體操作,請參見登入Kibana控制台
    說明 本文以Elasticsearch 7.10.0版本為例,其他版本操作可能略有差別,請以實際介面為準。
  2. 單擊右上方的Dev tools
  3. Console頁簽,執行以下指令碼,開啟索引壓縮。

    假設您已建立test索引,可通過如下指令碼為該索引開啟壓縮。

    PUT test/_settings
    {
      "index.codec" : "ali"
    }

    為索引添加以上配置之後,Elasticsearch預設會對該索引的行存(source)、列存(docvalue)和倒排(postings)三類檔案使用zstd演算法進行壓縮。

    您也可以為某類檔案使用指定的壓縮演算法。以下樣本表示對倒排(postings)檔案不開啟壓縮,對行存(source)和列存(docvalue)檔案使用zstd演算法進行壓縮。

    說明

    如果您要關閉某類檔案的壓縮,可將對應參數配置為"",例如以下範例程式碼中的"index.postings.compression":""

    PUT test/_settings
    {
      "index.codec":"ali",
      "index.doc_value.compression.default":"zstd",
      "index.postings.compression":"",
      "index.source.compression":"zstd"
    }

    索引配置參數說明如下。

    索引配置參數

    參數取值說明

    index.doc_value.compression.default

    • lz4:對列存(docvalue)檔案使用lz4壓縮演算法。

    • zstd:對列存(docvalue)檔案使用zstd壓縮演算法。

    說明

    該外掛程式目前只對索引中的number類型、date類型、keyword類型和ip類型欄位的docvalue檔案開啟壓縮。

    index.postings.compression

    zstd:對倒排(postings)檔案使用zstd壓縮演算法。

    index.source.compression

    • zstd:對行存(source)檔案使用zstd壓縮演算法,壓試塊大小為128 KB。

    • zstd_1024:對行存(source)檔案使用zstd壓縮演算法,壓試塊大小為1024 KB。

    • zstd_dict:對行存(source)檔案使用zstd壓縮演算法,附帶了dict功能,會比zstd壓縮率更高,但是讀寫效能會差一些。

    • best_compression:對行存(source)檔案使用原生Elasticsearch對應的source壓縮演算法。

    • default:對行存(source)檔案使用原生Elasticsearch對應的source壓縮演算法。

    index.postings.pfor.enabled

    是否開啟索引倒排編碼最佳化:

    • true :開啟

    • false:不開啟

    該功能為原生ES 8.0版本功能,可以節省keyword, match_only_text, text欄位14.4%的儲存空間,3.5%的整體磁碟空間。被阿里核心應用在低版本阿里雲ES上。

使用source_reuse_doc_values特性

開啟source_reuse_doc_values特性

執行以下命令,在建立索引時開啟source_reuse_doc_values特性。

PUT test
{
  "settings": {
    "index": {
      "ali_codec_service": {
        "source_reuse_doc_values": {
          "enabled": true
        }
      }
    }
  }
}
重要

source_reuse_doc_values特性只能在建立索引時開啟,且一旦開啟無法關閉。

調整source_reuse_doc_values特性配置

說明

原生Elasticsearch底層會儲存多份資料,例如資料會同時儲存在_source、倒排索引和doc_values中,source_reuse_doc_values會將_source中儲存的相同部分的JSON資料進行裁剪,來降低整體索引的大小。

開啟source_reuse_doc_values特性後,您還可以根據業務,調整source_reuse_doc_values特性的相關配置:

  • 調整開啟source_reuse_doc_values欄位的最大個數。

    當開啟source_reuse_doc_values特性的欄位個數超過您設定的值,Elasticsearch將拋出異常或自動關閉source_reuse_doc_values特性,預設為50。調整方式如下。

    PUT _cluster/settings
    {
      "persistent": {
           "apack.ali_codec_service.source_reuse_doc_values.max_fields": 100
      }
    }
  • 設定是否強制不能超過您設定的開啟source_reuse_doc_values特性的最大欄位個數。

    • true:超過您設定的值,Elasticsearch會拋出異常。

    • false:超過您設定的值,Elasticsearch會自動關閉source_reuse_doc_values特性。

    PUT _cluster/settings
    {
      "persistent": {
           "apack.ali_codec_service.source_reuse_doc_values.strict_max_fields": true
      }
    }
  • 調整查詢時讀取開啟了source_reuse_doc_values欄位值的並發度。

    在擷取原文時,source_reuse_doc_values特性會並發讀取文檔中開啟了source_reuse_doc_values欄位的值並進行組裝。為了降低耗時,您可以調整系統擷取各欄位值的並發度。預設並發度為5,您可以通過如下方式調整。

    PUT test/_settings
    {
      "index": {
        "ali_codec_service": {
          "source_reuse_doc_values": {
            "fetch_slice": 2
          }
        }
      }
    }
  • 調整讀取開啟了source_reuse_doc_values欄位值的線程池和隊列大小。

    線程池預設大小為節點的核心數,隊列預設大小為1000。該配置僅能通過修改YML檔案調整,修改YML檔案的具體操作請參見配置YML參數。您可以在YML檔案中添加如下配置進行調整。

    apack.doc_values_fetch:
        size: 8
        queue_size: 1000