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
。
使用索引壓縮功能
- 登錄目標阿里云Elasticsearch實例的Kibana控制臺,根據頁面提示進入Kibana主頁。登錄Kibana控制臺的具體操作,請參見登錄Kibana控制臺。說明 本文以阿里云Elasticsearch 7.10.0版本為例,其他版本操作可能略有差別,請以實際界面為準。
- 單擊右上角的Dev tools。
在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