当前位置: 首页 > 知识库问答 >
问题:

elasticsearch不响应批量操作

卫高谊
2023-03-14

我在Azure上有3个主节点+3个数据节点elasticsearch集群。我试图执行批量操作,但我得到了关于节点本身的失败错误,以下是我如何设置客户端:

    final Builder builder = Settings.builder();
    final org.elasticsearch.client.transport.TransportClient.Builder transBuilder = TransportClient.builder();
    builder.put("cluster.name", esCluster);
    if (esShield) {
        builder.put("shield.user", esUsername + ":" + esPassword);
        transBuilder.addPlugin(ShieldPlugin.class);
    }
    final Settings settings = builder.build();
    TransportClient esClient = transBuilder.settings(settings).build();
    final String[] hosts = esHost.split(",");
    for (String host : hosts) {
        esClient.addTransportAddress(new InetSocketTransportAddress(new InetSocketAddress(host, Integer.parseInt(esPort))));
    }

下面是批量操作:

BulkProcessor bulkProcessor = BulkProcessor.builder(getClient(), new BulkProcessor.Listener() {
        @Override
        public void beforeBulk(long executionId, BulkRequest request) {
            LOGGER.info("Going to execute new bulk composed of {" + request.numberOfActions() + "} actions");
        }

        @Override
        public void afterBulk(long executionId, BulkRequest request, BulkResponse response) {
            LOGGER.info("Executed bulk composed of {" + request.numberOfActions() + "} actions");
        }

        @Override
        public void afterBulk(long executionId, BulkRequest request, Throwable failure) {
            LOGGER.info("Error executing bulk");
            failure.printStackTrace();
        }
    }).setBulkActions(docs.size()).setConcurrentRequests(250).build();
    for (DBObject doc : docs) {
        bulkProcessor.add(getClient().prepareIndex(indexName, typeName).setSource(doc.toMap()).request());
    }

它开始对1000个记录批次做出罚款响应,如下所示:

将执行由{1001}个操作组成的新大容量

然后我开始得到以下错误:

传输:383-[Stanley Stewart]未能获取{#传输#-1}{10.0.0.10}{10.0.0.10:9300}的节点信息,正在断开连接...ReceiveTimeOutTransportException[[][10.0.0.10:9300][Cluster:Monitor/Nodes/Livential]request_id[60]在[5000ms]之后超时]在org.ellasticSearch.transport.transportService$timeouthandler.run(TransportService.java:679)在java.util.concurrent.threadPoolExecutor.runworker(threadPoolExecutor.java:1142)在

最后我得到了以下错误:

大容量:148-[Stanley Stewart]无法执行大容量请求%1。nonodeAvailableException[nonodeAvailableException[nonodeAvailable[nonodeAvailable][nonodeAvailable[nonodeAvailable][nonodeAvailable][nonodeAvailable][nonodeAvailable][nonodeAvailable][没有配置的节点可用:[{#Transport#-1}{10.0.0.10}{10.0.0.10:9300},{#Transport#-2}{10.0.0.11}{10.0.0.11:9300},{#Transport#-3}{port.transportProxyClient.execute(TransportProxyClient.java:55)在org.ellasticSearch.client.transport.transportClient.doExecute(TransportClient.java:288)在org.ellasticSearch.client.support.abstractClient.execute(abstractClient.java:359)在org.ellasticSearch.client.support.abstractClient.bulk(abstractClient.java:436)在.action.bulk.bulkreque在org.elasticsearch.action.bulk.bulkprocessor.execute(bulkprocessor.java:121)在org.elasticsearch.action.bulk.bulkprocessor.execute(bulkprocessor.java:312)在org.elasticsearch.action.bulk.bulkprocessor.executeIfneed(bulkprocessor.java:303)在org.elasticsearch.action.bulk.processor.internaladd(bulkprocessor.java:285)在4)在org.elasticsearch.action.bulk.bulkprocessor.add(bulkprocessor.java:250)

谁能帮我弄清楚是怎么回事,怎么解决?

共有1个答案

宋昊然
2023-03-14

这可能是因为索引的刷新间隔太低。尝试在大容量处理之前将索引的刷新间隔设置为-1。批量处理完成后可以重置它。

https://www.elastic.co/guide/en/elasticsearch/reference/current/indexes-update-settings.html#bulk

 类似资料:
  • 问题内容: 我不确定是否在批量索引编制中正确使用了该操作。 我的要求是: 网址是: 我想我错过了文档中的某些内容,但仍然找不到如何进行此操作的方法。 我想要 在索引中创建以上文档,或者如果存在则对其进行更新。 问题答案: 如果您通过批量API将索引中的记录添加为 那么如果该ID已经存在于索引中,您将获得一个异常。如果要添加或 替换 文档(取决于文档是否存在),则应按以下方式进行请求 如果已经存在具

  • 我想问一下关于Elasticsearch批量API的问题 这是我使用批量API的代码 我遇到了超时异常,因为我的记录有800K。java.net.SocketTimeoutException:连接超时30,000毫秒http-outgoing-16[活动] 我试图分解传入的jsonList,但有时会出现相同的错误。 我目前使用的是Elasticsearch 7.6.2版本。 异常跟踪 Java.n

  • 勾选具体视频,弹出批量操作框,在此还可以快捷的批量修改视频分类。 批量操作-移动页面:

  • 我正在使用Java Rest客户端进行弹性搜索https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/index.html但找不到批量插入或更新的方法。如何与该客户进行批量操作?

  • BatchResult batch(BatchRequest request) 功能 批量读写操作,消耗各自对应的读写配额。同一个batch中多个操作修改同一行数据可能导致未定义行为(数据不一致), 应当避免,另外如果一个batch包含同一行的读和写操作,其执行顺序是不确定的,不推荐使用 另外,要注意以下两点: 1.同一个batch里的子操作不保证顺序 2.batch操作不保证原子性,当返回成功即

  • 问题内容: 似乎我有一个相似但不相同的查询,因此最好像@Val建议的那样,让其他人从中受益。 因此,类似于上述内容,我需要在索引中插入大量数据(我的初始测试大约是10000个文档,但这只是针对POC,还有更多)。我想插入的数据在.json文档中,看起来像这样(片段): 我自己是ElasticSearch的新手,但是,从阅读文档开始,我的假设是我可以获取.json文件并根据其中的数据创建索引。从那以