全部產品
Search
文件中心

Elasticsearch:使用aliyun-codec外掛程式

更新時間:Apr 04, 2026

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

使用須知

  • 使用前需先安裝外掛程式,請參見安裝或卸載系統預設外掛程式

  • aliyun-codec外掛程式僅支援7.10.0版本執行個體。

  • 索引壓縮功能需核心版本 1.5.0 及以上,source_reuse_doc_values 特性需核心版本 1.6.0 及以上。如目前的版本不滿足要求,請先完成核心升級

效能參考

以下為aliyun-codec外掛程式在特定測試環境下的效能資料,供評估參考。

測試環境:單個index,索引大小1.2 TB,22個shard。開啟行存、列存和倒排壓縮,均使用zstd壓縮演算法。資料集為Elasticsearch線上主日誌。

索引壓縮:與未開啟索引壓縮的叢集相比:

  • 寫入速率:不變。

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

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

source_reuse_doc_values:與未開啟該特性的叢集相比:

  • 寫入速率:不變。

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

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

使用索引壓縮功能

index.codec為非動態設定,修改前需先關閉索引,修改後重新開啟索引。

假設已建立test索引,執行以下命令為該索引開啟壓縮:

POST test/_close

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

POST test/_open

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

也可以為某類檔案使用指定的壓縮演算法。以下樣本對倒排檔案不開啟壓縮,對行存和列存檔案使用zstd演算法進行壓縮。要關閉某類檔案的壓縮,可將對應參數配置為""

POST test/_close

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

POST test/_open

索引配置參數說明如下。

索引配置參數

參數取值說明

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%的整體磁碟空間。

使用source_reuse_doc_values特性

Elasticsearch底層會在_source、倒排索引和doc_values中儲存多份資料。source_reuse_doc_values特性會將_source中與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特性後,可根據業務調整以下配置。

調整最大欄位個數

當開啟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
  }
}

設定是否強制限制最大欄位個數

  • 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特性會並發讀取文檔中開啟了該特性的欄位值並進行組裝。預設並發度為5。

PUT test/_settings
{
  "index": {
    "ali_codec_service": {
      "source_reuse_doc_values": {
        "fetch_slice": 2
      }
    }
  }
}

調整線程池和隊列大小

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

apack.doc_values_fetch:
size: 8
queue_size: 1000