elasticsearch 版本\u冲突\u引擎\u异常与\u更新\u按\u查询,elasticsearch,apache-flink,update-by-query,version-conflict-engine-exception,elasticsearch,Apache Flink,Update By Query,Version Conflict Engine Exception" /> elasticsearch 版本\u冲突\u引擎\u异常与\u更新\u按\u查询,elasticsearch,apache-flink,update-by-query,version-conflict-engine-exception,elasticsearch,Apache Flink,Update By Query,Version Conflict Engine Exception" />

elasticsearch 版本\u冲突\u引擎\u异常与\u更新\u按\u查询

elasticsearch 版本\u冲突\u引擎\u异常与\u更新\u按\u查询,elasticsearch,apache-flink,update-by-query,version-conflict-engine-exception,elasticsearch,Apache Flink,Update By Query,Version Conflict Engine Exception,我在flink中使用ElasticSearch更新查询API,flink并行度为1。但我得到了版本冲突引擎异常,这是我在flink Richsink函数中的代码,如下所示: UpdateByQueryRequestBuilder builder = UpdateByQueryAction.INSTANCE.newRequestBuilder(client); builder.abortOnVersionConflict(true); builder

我在flink中使用ElasticSearch更新查询API,flink并行度为1。但我得到了版本冲突引擎异常,这是我在flink Richsink函数中的代码,如下所示:

        UpdateByQueryRequestBuilder builder = UpdateByQueryAction.INSTANCE.newRequestBuilder(client);
        builder.abortOnVersionConflict(true);
        builder.source(indexName);
        builder.filter(filter);
        builder.setMaxRetries(MAX_RETRIES);
        builder.refresh(true);

        String updateTime = Instant.ofEpochMilli(ts).atZone(ZoneId.systemDefault())
                .format(ELASTIC_SEARCH_DATE_TIME_FORMATTER);

        Map<String, Object> params = Maps.newHashMap();
        params.put("fieldName", fieldName);
        params.put("updateTime", updateTime);
        params.put("model", this.transformMap(JacksonUtils.convertValue(model, new TypeReference<Map<String, Object>>() {
        })));

        builder.script(new Script(ScriptType.INLINE, Script.DEFAULT_SCRIPT_LANG, UPDATE_BY_MODEL_PAINLESS_CODE, params));
        BulkByScrollResponse response = builder.get();
UpdateByQueryRequestBuilder=UpdateByQueryAction.INSTANCE.newRequestBuilder(客户端);
builder.abortOnVersionConflict(true);
builder.source(indexName);
过滤器(过滤器);
builder.setMaxRetries(最大重试次数);
builder.refresh(true);
字符串updateTime=Instant.ofEpochMilli(ts).atZone(ZoneId.systemDefault())
.格式(弹性搜索\日期\时间\格式化程序);
Map params=Maps.newHashMap();
参数put(“字段名”,字段名);
参数put(“updateTime”,updateTime);
params.put(“model”,this.transformMap(JacksonUtils.convertValue)(model,newtypereference()){
})));
脚本(新脚本(ScriptType.INLINE、script.DEFAULT\u script\u LANG、UPDATE\u BY\u MODEL\u PAINLESS\u CODE、params));
BulkByScrollResponse=builder.get();

我可以肯定,只有这个应用程序才能访问Elasticsearch,flink parallelism是1,就像查询API中的单线程调用更新一样?为什么我有版本冲突引擎异常?那么如何只做一次呢?

我认为有两种可能性:

  • 正在运行可以更新文档的其他内容
  • Flink的elasticsearch接收器至少提供一次保证,这意味着在发生故障时,接收器有时会在恢复期间执行重复写入。这可能会导致尝试使用过期版本号更新文档

  • 我认为有两种可能性:

  • 正在运行可以更新文档的其他内容
  • Flink的elasticsearch接收器至少提供一次保证,这意味着在发生故障时,接收器有时会在恢复期间执行重复写入。这可能会导致尝试使用过期版本号更新文档