京东ES支持ZSTD压缩算法上线了:高性能,低成本

💡 原文中文,约6100字,阅读约需15分钟。
📝

内容提要

京东ES上线支持ZSTD压缩算法,提高数据存储和传输效率,降低成本。适用于写多读少场景。使用方法简单,申请后指定压缩等级。技术实现:ES与Lucene关系,压缩文件对比。ES侧实现:引入zstd-jni实现压缩能力。

🔎

延伸解读

适用场景与限制

ZSTD压缩算法主要适用于写多读少的场景,如日志和监控。用户需在创建索引时指定压缩算法,且不支持动态修改。目前该功能仅在内部泰山零售ES上线,支持7.X和6.8.23版本,后续将在云舰ES和公有云ES上线,但受许可证限制,公有云仅推出6.8.23版本。

性能与存储收益

测试结果显示,ZSTD压缩等级3的写入性能相对于best_compression提升38.46%,相对于lz4提升5.88%;存储相对于lz4节省24%,与best_compression基本持平。这些数据基于特定测试环境,实际效果可能因用户数据而异。

技术实现要点

ZSTD压缩在ES侧实现,通过引入zstd-jni库提供压缩能力。ES扩展了CompressionMode,自定义ZstdCompressor和ZstdDecompressor,并利用Java SPI机制加载自定义压缩算法。由于ES启动时的安全机制,需在security.policy文件中添加代码权限授权策略。

❓

Q&A

京东ES支持ZSTD压缩算法的主要优势是什么?

京东ES支持ZSTD压缩算法可以提高数据存储和传输效率,降低存储和带宽成本,适合写多读少的场景。

ZSTD压缩算法适合哪些场景使用?

ZSTD压缩算法适合写多读少的场景,如日志和监控。

如何在京东ES中使用ZSTD压缩算法?

用户在创建索引时需指定压缩算法,使用index.codec设置为jd_zstd或jd_zstd_6,并选择压缩等级。

ZSTD压缩等级3的性能提升如何?

ZSTD压缩等级3的写入性能提升38.46%,存储节省24%。

京东ES与Lucene的关系是什么?

京东ES是基于Lucene构建的,ES集群由多个节点组成,每个索引由多个分片构成,分片是Lucene实例。

ZSTD压缩算法的实现依赖于什么?

ZSTD压缩算法的实现依赖于zstd-jni库,需要在ES代码中进行自定义配置。

🏷️

标签

➡️

继续阅读