我正在编写一个简单的应用程序,通过Kafka使用者将数据存储到Elasticsearch中。我的问题是,每当我执行相同的消费者应用程序,它是抛出一个异常后,处理40或50条记录。异常描述指出,总字段的限制已超过索引(1000)。我所了解到的是,Elasticsearch中的默认值(条目)是1000,但在我的例子中,它远远低于1000。
我在下面添加一个例外,谢谢您的帮助和建议!
Suppressed: org.elasticsearch.client.ResponseException: method [POST], host [https://kafka-poject-twitter-8210391326.eu-west-1.bonsaisearch.net:443], URI [/twitter/tweets?timeout=1m], status line [HTTP/1.1 400 Bad Request] {"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"Limit of total fields [1000] in index [twitter] has been exceeded"}],"type":"illegal_argument_exception","reason":"Limit of total fields [1000] in index [twitter] has been exceeded"},"status":400} at org.elasticsearch.client.RestClient$SyncResponseListener.get(RestClient.java:920) at org.elasticsearch.client.RestClient.performRequest(RestClient.java:227) at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1256)
发布于 2020-06-22 15:17:22
主要原因- Limit of total fields [1000] in index [twitter] has been exceeded
你可以通过增加限制来克服这一点。
PUT twitter/_settings
{
"index.mapping.total_fields.limit": 2000
}发布于 2020-06-22 15:27:26
您所面临的问题与插入的文档(tweet)数量无关,而与这些文档中包含的不同字段名的数量有关。
正如Elasticsearch的文档中所解释的:
限制已经到位,以防止映射和搜索变得太大。更高的值会导致性能下降和内存问题,特别是在负载高或资源少的集群中。
尽管你可以增加这个限制,但它可能不是解决你的问题的方法。如果您达到了1000只插入50条记录的极限,即使您增加了它,您可能很快就会再次达到新的限制。
为了解决这个问题,您应该对存储在Elasticsearch中的JSON进行一些预处理,确保只对相关字段进行索引。例如,假设您正在索引tweet,我希望文档具有如下模式:
{
"author": ...,
"timestamp": ...,
"tweet": ...
}有了这样的模式,您可以将字段Elasticsearch的数量限制在只跟踪3条,而不依赖于您编写的记录数量。
您可以使用索引模板设置严格属性来强制执行在Elasticsearch中插入的文档的架构。这样,如果在试图索引的文档中有不需要的字段,您将得到一个错误。
https://stackoverflow.com/questions/62517410
复制相似问题