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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 1、背景使用Jest进行批量插入数据的时候,偶尔会出现如下的bugOne or more of the items in the Bulk request failed, checkBulkResult.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");

   }

1

2

3

4

5

6

7

8

9

10

源码中,有明确告诉:


批量操作失败,会打印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、跟踪排查,转化思路,不放弃,直到定位本质原因。



加入知识星球,更短时间更快习得更多干货!


2018-05-25 22:47 思于家中床前


作者:铭毅天下

转载请标明出处,原文地址:

http://blog.csdn.net/laoyang360/article/details/52244917

如果感觉本文对您有帮助,请点击‘顶’支持一下,您的支持是我坚持写作最大的动力,谢谢!

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
6月前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
655 3
|
3月前
|
存储 Ubuntu Oracle
在Ubuntu 14.04上安装和配置Elasticsearch的方法
在Ubuntu 14.04上安装和配置Elasticsearch的方法
43 0
|
3月前
|
存储 安全 Java
在CentOS 7上安装和配置Elasticsearch的方法
在CentOS 7上安装和配置Elasticsearch的方法
243 0
|
6月前
|
存储 Java Maven
SpringBoot整合Jest和Elasticsearch实践
SpringBoot整合Jest和Elasticsearch实践
223 1
|
6月前
|
数据采集 API 网络架构
Elasticsearch FSCrawler 一个bug及解决方案
Elasticsearch FSCrawler 一个bug及解决方案
93 4
|
6月前
|
存储 监控 安全
最近几个典型 Elasticsearch 线上易出错难排查问题汇集,咱们得避免!
最近几个典型 Elasticsearch 线上易出错难排查问题汇集,咱们得避免!
79 3
|
JSON API 数据格式
学好Elasticsearch系列-索引的批量操作
学好Elasticsearch系列-索引的批量操作
223 1
|
存储 自然语言处理 Java
Elasticsearch常见错误及如何排查错误
Elasticsearch常见错误及如何排查错误
418 0
|
6月前
|
Java
elasticsearch在Java中查询指定列的方法
elasticsearch在Java中查询指定列的方法
125 0
|
6月前
|
NoSQL Java API
SpringBoot【ElasticSearch集成 02】Java HTTP Rest client for ElasticSearch Jest 客户端集成(依赖+配置+增删改查测试源码)推荐使用
SpringBoot【ElasticSearch集成 02】Java HTTP Rest client for ElasticSearch Jest 客户端集成(依赖+配置+增删改查测试源码)推荐使用
111 0