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