概述
今天咱们来看下es的数据导出,最近接到项目经理很多导出需求,要求导出部分数据或者整月的数据,索性就自研了一套导出工具。
自研采用纯java语言,通过无锁的内存队列实现生产消费模型,支持多种类型导出(json文件、CSV文件、MYSQL数据库、ES)。
其实官方有现成的导出工具elasticsearch-dump,功能很强大,支持文件、es等多种类型。但是他的性能如何呢?接下来咱们一起看下。
环境准备
物理机:96核 64G 4THDD
Elasticsearch:jvm设置20G 版本7.15.0
elasticsearch-dump: 最新版本docker 运行
自研工具elasticsearch-dump-1.0 jvm设置3G
索引ccr_test 400w的证书数据。
验证
自研系统 :导出语句
"{\"size\":1000,\"track_total_hits\":true}"
运行日志:
通过日志我们可以清楚的看出来本次导出400w数据共花费了1分15秒钟,导出的文件占用磁盘5.1G
接下来咱们再看官方的导出工具,准备好镜像文件:
运行语句:
docker run --rm -ti -v /home/app:/tmp elasticdump/elasticsearch-dump --input=http://192.168.229.48:9200/ccr_test --output=/tmp/data.json --type=data --limit=1000
运行日志如下:
最后发现同样运行1分15秒后官方的工具才导出130w的数据。
总结
实测发现自研数据几乎没有性能损耗,我们在4核 16G 200G虚机上搭建单实例es设置jvm2G 发现导出性能同样可以在w/s级别,性能确实杠杠的。
但是功能上没有官方的丰富,他们支持多种格式,多种导出类型(mapping 、data等)。
本次测试的经过3轮比对,取的平均值,自研工具均完胜官方,如果有异议的欢迎一起来探讨。
私信给源码地址
Elasticsearch系列经典文章