方法 | Elasticsearch Jest 批量操作bug 根因定位排查

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 本文介绍Elasticsearch Jest 批量操作bug 根因定位排查的方法。

1、背景

使用Jest进行批量插入数据的时候,偶尔会出现如下的bug

One or more of the items in the Bulk request failed, check
BulkResult.getItems() for more information.

起初认为是偶发,就把并发数调小,就再没有关注。

2、出了事了,才找到根因。

当今天调试的时候,把批量数调到最小1的时候,ES中仍然没有导入数据。

这才意识到,不对,是不是单条数据就有问题?

后改到单条数据(不走批量),直接插入,报错如下:

单条导入报错如下:

[INFO]-[com.es.process.ESProcess] err
{“root_cause”:[{“type”:”mapper_parsing_exception”,”reason”:”Field
[_id] is a metadata field and cannot be added inside a document. Use
the index API request
parameters.”}],”type”:”mapper_parsing_exception”,”reason”:”Field [_id]
is a metadata field and cannot be added inside a document. Use the
index API request parameters.”}

比较直观,字段的问题。

逐个字段修复后,问题不在。

批量值改成较大值100后,也能较快导入。

3、走的弯路

3.1 源码附近找答案,无果。

Jest Bulk Github 源码位置:

if (isHttpSuccessful(statusCode)) {
    if(jsonMap.has("errors") && jsonMap.get("errors").getAsBoolean())
    {
        result.setSucceeded(false);
        result.setErrorMessage("One or more of the items in the Bulk request failed, check BulkResult.getItems() for more information.");
        log.debug("Bulk operation failed due to one or more failed actions within the Bulk request");
    } else {
        result.setSucceeded(true);
        log.debug("Bulk operation was successfull");
    }

源码中,有明确告诉:

批量操作失败,会打印Bulk operation failed错误。但是没有明确告诉,错在哪里?

更进一步,有告诉:

BulkResult.getItems() for more information

调试后,打印日志如下:

error = [io.searchbox.core. BulkResultBulkResultItem@48782849,io.searchbox.core.BulkResultBulkResultItem@48782849,io.searchbox.core.BulkResultBulkResultItem@6e2561df, 
io.searchbox.core.BulkResult$BulkResultItem@1196e6ad,

貌似,还是没有根本错误的原因。

3.2 Google/Stackoverflow 查询

类似问题,匹配度少,无果。

3.3 想想可能出错的场景?

1、是不是要大量doc没有formerge导致的?

和这个没有本质关联。

2、是不是短时间内大量更新,导致的冲突。

不会的,ES是_version版本控制的。

3、是不是批量操作量太大了,超过队列长度大小。

逐步减少到1,才找到根本原因。

4、小结

1、批量的错误,要缩小范围调试,单条数据看有没有问题?

2、跟踪排查,转化思路,不放弃,直到定位本质原因。


作者:铭毅天下
来源:CSDN
原文:https://blog.csdn.net/laoyang360/article/details/80457798
版权声明:本文为博主原创文章,转载请附上博文链接!

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
1132 3
|
存储 Java Maven
SpringBoot整合Jest和Elasticsearch实践
SpringBoot整合Jest和Elasticsearch实践
460 1
|
JSON API 数据格式
学好Elasticsearch系列-索引的批量操作
学好Elasticsearch系列-索引的批量操作
351 1
|
存储 自然语言处理 Java
Elasticsearch常见错误及如何排查错误
Elasticsearch常见错误及如何排查错误
846 0
|
存储 Ubuntu Oracle
在Ubuntu 14.04上安装和配置Elasticsearch的方法
在Ubuntu 14.04上安装和配置Elasticsearch的方法
197 0
|
存储 安全 Java
在CentOS 7上安装和配置Elasticsearch的方法
在CentOS 7上安装和配置Elasticsearch的方法
1019 0
|
数据采集 API 网络架构
Elasticsearch FSCrawler 一个bug及解决方案
Elasticsearch FSCrawler 一个bug及解决方案
|
存储 监控 安全
最近几个典型 Elasticsearch 线上易出错难排查问题汇集,咱们得避免!
最近几个典型 Elasticsearch 线上易出错难排查问题汇集,咱们得避免!
|
Java
elasticsearch在Java中查询指定列的方法
elasticsearch在Java中查询指定列的方法
261 0
|
NoSQL Java API
SpringBoot【ElasticSearch集成 02】Java HTTP Rest client for ElasticSearch Jest 客户端集成(依赖+配置+增删改查测试源码)推荐使用
SpringBoot【ElasticSearch集成 02】Java HTTP Rest client for ElasticSearch Jest 客户端集成(依赖+配置+增删改查测试源码)推荐使用
252 0

热门文章

最新文章