elasticsearch,fusionauth,Java,Amazon Web Services,elasticsearch,Fusionauth" /> elasticsearch,fusionauth,Java,Amazon Web Services,elasticsearch,Fusionauth" />

Java 带AWS Elasticsearch的FusionAuth不完全重新索引

Java 带AWS Elasticsearch的FusionAuth不完全重新索引,java,amazon-web-services,elasticsearch,fusionauth,Java,Amazon Web Services,elasticsearch,Fusionauth,我正在从自托管Elasticsearch FusionAuth搜索迁移到AWS Elasticsearch服务解决方案 我有一个新的FusionAuth应用程序EC2实例,从配置为使用新Elasticsearch服务的在用数据库中读取 从新的应用程序实例触发重新索引时,我看到只有大约60k或62.5k的文档被写入到新索引中,而我预计大约为6mil 我在AWS的Elasticsearch服务中没有发现错误,在应用程序的日志中我可以看到:(端点故意省略) 2020年2月13日10:18:46.116

我正在从自托管Elasticsearch FusionAuth搜索迁移到AWS Elasticsearch服务解决方案

我有一个新的FusionAuth应用程序EC2实例,从配置为使用新Elasticsearch服务的在用数据库中读取

从新的应用程序实例触发重新索引时,我看到只有大约60k或62.5k的文档被写入到新索引中,而我预计大约为6mil

我在AWS的Elasticsearch服务中没有发现错误,在应用程序的日志中我可以看到:(端点故意省略)

2020年2月13日10:18:46.116上午信息io.fusionauth.api.service.search.ElasticSearchClientProvider-连接到fusionauth搜索引擎[https://vpc-.eu-west-1.es.amazonaws.com]
2020年2月13日11:19:55.176信息[http-nio-9011-exec-3]org.apache.coyote.http11.Http11Processor.service解析http请求头时出错
注意:进一步出现的HTTP头解析错误将在调试级别记录。
java.lang.IllegalArgumentException:在方法名称中找到无效字符。HTTP方法名称必须是令牌
位于org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:430)
位于org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:684)
位于org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
位于org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:808)
位于org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
“/usr/local/fusionauth/logs/fusionauth app.log”[readonly]43708L,4308629C 42183,1 96%
位于io.fusionauth.api.service.search.client.domain.documents.IndexUser.(IndexUser.java:79)
位于io.fusionauth.api.service.search.ElasticSearchEngine.lambda$index$1(ElasticSearchEngine.java:140)
forEach(ArrayList.java:1257)
位于io.fusionauth.api.service.search.ElasticSearchEngine.index(ElasticSearchEngine.java:140)
位于io.fusionauth.api.service.user.ReindexRunner$ReindexWorker.run(ReindexRunner.java:101)
运行(Thread.java:748)
线程“thread-14”java.lang.NullPointerException中出现异常
位于io.fusionauth.api.service.search.client.domain.documents.IndexUser.(IndexUser.java:79)
位于io.fusionauth.api.service.search.ElasticSearchEngine.lambda$index$1(ElasticSearchEngine.java:140)
forEach(ArrayList.java:1257)
位于io.fusionauth.api.service.search.ElasticSearchEngine.index(ElasticSearchEngine.java:140)
位于io.fusionauth.api.service.user.ReindexRunner$ReindexWorker.run(ReindexRunner.java:101)
运行(Thread.java:748)
线程“thread-13”java.lang.NullPointerException中的异常
线程“thread-11”java.lang.NullPointerException中出现异常
线程“thread-12”java.lang.NullPointerException中的异常
2020年2月18日10:23:29.064上午信息io.fusionauth.api.service.user.REINDEXRANNER-Reindex在[86797]毫秒或[86]秒内完成。
尽管有一些例外情况,但在最后还有一个“Reindex completed”信息日志


由于不知道Elasticsearch的详细信息,我也不确定从何处开始调查NullPointerException。

看起来重新索引操作出现异常,这可能是索引被截断的原因

Exception in thread "Thread-14" java.lang.NullPointerException
        at io.fusionauth.api.service.search.client.domain.documents.IndexUser.<init>(IndexUser.java:79)


我们使用导入API将大部分用户导入数据库。由于我们已经将所有用户索引到另一个索引中,所以我不希望数据库中有坏数据。我已经检查过了,没有一个用户没有电子邮件或用户名,或者没有电子邮件。有没有办法更改索引批量大小?在我看来,它目前每次同步2.5k批处理,并且在运行25次后失败。我想尝试修改它,尝试找到某种模式。我们的数据都不是空的我注意到日志中提到了:/mappings/user.json-我们在哪里可以找到它?用户名对于我们是空的,但是电子邮件对于我们不是空的anyone@KasiaGogolek可以修改默认值,将这两个值添加到
fusionauth.properties
fusionauth-app.reindex批量大小
fusionauth-app.reindex线程计数中。(需要重新启动)我们最近将默认批处理大小减少到1k,有2个线程。如果您使用的是旧版本,则为5个线程,批处理大小为2.5k。这对于较小的系统来说有点过分。@KasiaGogolek re:
user.json
这是我们为用户提供的基本映射,您始终可以通过弹性API查询弹性当前映射值。
Exception in thread "Thread-14" java.lang.NullPointerException
        at io.fusionauth.api.service.search.client.domain.documents.IndexUser.<init>(IndexUser.java:79)

SELECT email, username from identities WHERE email IS NULL OR username IS NULL