elasticsearch,apache-kafka,Java,elasticsearch,Apache Kafka" /> elasticsearch,apache-kafka,Java,elasticsearch,Apache Kafka" />

Java Elasticsearch中49条记录后的异常

Java Elasticsearch中49条记录后的异常,java,elasticsearch,apache-kafka,Java,elasticsearch,Apache Kafka,我正在编写一个简单的应用程序,通过Kafka Consumer将数据存储到Elasticsearch中。我的问题是,每当我执行同一个消费者应用程序时,它都会在处理40或50条记录后引发异常。异常描述表示已超过索引(1000)中的字段总数限制。据我所知,Elasticsearch中的默认值(条目)是1000,但就我而言,它远低于1000 我在下面添加了例外情况,提前感谢您的帮助或建议 抑制:org.elasticsearch.client.ResponseException:方法[POST],主机

我正在编写一个简单的应用程序,通过Kafka Consumer将数据存储到Elasticsearch中。我的问题是,每当我执行同一个消费者应用程序时,它都会在处理40或50条记录后引发异常。异常描述表示已超过索引(1000)中的字段总数限制。据我所知,Elasticsearch中的默认值(条目)是1000,但就我而言,它远低于1000

我在下面添加了例外情况,提前感谢您的帮助或建议


抑制:org.elasticsearch.client.ResponseException:方法[POST],主机[https://kafka-poject-twitter-8210391326.eu-west-1.bonsaisearch.net:443],URI[/twitter/tweets?timeout=1m],状态行[HTTP/1.1 400错误请求]{“错误”:{“根本原因”:[{“类型”:“非法参数”\u异常”,“原因”:“索引中的字段总数限制[1000]已超过[twitter],“类型”:“非法参数”\u异常”,“原因”:“索引[twitter]中的总字段[1000]限制已超过”},“状态”:400}位于org.elasticsearch.client.RestClient$SyncResponseListener.get(RestClient.java:920)位于org.elasticsearch.client.RestClient.performRequest(RestClient.java:227)在org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1256)
主要原因-
索引[twitter]中总字段[1000]的限制已超过

您可以通过增加限制来克服此问题

PUT twitter/_settings
{
  "index.mapping.total_fields.limit": 2000
}

您面临的问题与您插入的文档(tweet)的数量无关,而是与此类文档中包含的不同字段名的数量有关

如Elasticsearch文档中所述:

设置此限制是为了防止映射和搜索变得过大。较高的值可能会导致性能下降和内存问题,特别是在高负载或资源较少的集群中

即使您可以增加此限制,但这可能不是问题的解决方案。如果您仅插入50条记录就达到1000条的限制,即使您增加此限制,也可能很快再次达到新的限制

要解决此问题,您应该对存储在Elasticsearch中的JSON进行一些预处理,确保只对相关字段进行索引。例如,如果您对tweet进行索引,我希望文档具有如下模式:

{
  "author": ...,
  "timestamp": ...,
  "tweet": ...
}
使用这样的模式,您可以将字段Elasticsearch必须跟踪的数量限制为3,与您编写的记录数量无关


您可以通过设置strict属性来强制Elasticsearch中插入的文档的架构。这样,如果您在尝试索引的文档中有不需要的字段,您将得到一个错误。

您可以显示您摄取的映射和示例文档吗?我只是存储twitter开发人员A的推文有没有可能是因为推特的长度(有些很长)?嘿@Gibbs,谢谢,它起作用了。快速提问,为什么它在30-40条记录之后抛出异常,而现在它已经处理了所有记录。谢谢,因为在30-40秒时,您的字段限制超过了默认值
1024
-
卡夫卡划分
使它在特定的时间间隔内更快、更合适-希望您被重置每次运行/从一开始就更改组Id。我没有更改组Id,但我在将索引限制更改为2000后更改了组Id,并且它处理了所有记录。好的,我想你的应用程序在30-40秒内处理了1024个字段。@Simransing我的回答有帮助吗?如果有,你会批准吗?好的,我也会尝试这种方法。我我改变了设置索引:2000,现在我可以处理所有的推文了。我没有使用你在回答中提到的最新版本(7.8)。