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