es sharding 文档数量超过最大限制,写入失败的4种解决方案

这篇具有很好参考价值的文章主要介绍了es sharding 文档数量超过最大限制,写入失败的4种解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

es 插入数据的时候报错
failure in bulk execution:
[0]: index [leopard_user.driver_work_detail_record], type [detail_info], id [xxx], message [ElasticsearchException[Elasticsearch exception [type=illegal_argument_exception, reason=number of documents in the index cannot exceed 2147483519]]],

超过了2^31次方

解决方案:
方案一
重新创建一个index 增大sharding 数量, reindex

新建一个索引

PUT xxxx_record_new
{
  "mappings": {
            "detail_info": {
                "properties": {
                    "carId": {
                        "type": "long"
                    }、、、
  "settings": {
    "number_of_shards": 16,
    "number_of_routing_shards":16,
    "number_of_replicas": 0,
    "refresh_interval": "-1",
    "translog": {
          "flush_threshold_size": "2048mb",
          "durability": "async"
        } 
  }

副本数量和refresh_interval 等reindex 以后再更改

POST _reindex
{
  "source": {
    "index": "xxxxx_record"
    , 
    "size": 10000
  },
  "dest": {
    "index": "xxxx_record_new",
    "op_type": "create"
  }
}

reindex过程中 源端索引不能有写入 避免数据不一致

方案二
通过别名的方式,
新建一个索引, 然后给旧的索引和新的索引 创建同一个别名, 并且允许写新的索引, 这样程序只需要把旧的索引名字改成新的别名,就可以实现, 查询旧的索引和新的索引, 只写新的索引。

  POST _aliases
{
  "actions": [
    {
      "add": {
        "index": "xxxx_record", 旧索引名字
        "alias": "xxxx_record_new",
        "is_write_index": false
      }
    },
    {
      "add": {
        "index": "xxx_record_1",   新索引名字
        "alias": "xxx_record_new",
        "is_write_index": true
      }
    }
  ]
}  

方案三、
清理历史数据

POST /xxxx_record/_delete_by_query?&slices=8&wait_for_completion=false&conflicts=proceed
{
	"query":{
		"bool":{
			"must":[
				{"range":{"gmt_create":{"gte":0,"lte": 1641028459000}}}
			]
		    
		}
	}
}
GET  /xxxx_record/_search
{
  "query":{
    "bool":{
      "must":[
        {"range":{"gmt_create":{"gte":0,"lte": 1641028459000}}}
      ]
        
    }
  }
}

看看命中多少数据

再删除过程中,如果删除一年的数据大概1.3亿, 大概删除半个小时以后,后台删除进程会退出,并且无报错,数据无法删除

控制每次只删除一天的数据可以删除成功,用的是es6.7版本,估计是数据超过了内存限制。

POST xxxx_record/_delete_by_query
{
  "query":{
    "range": {
      "gmt_create": {
        "gte": xxx,
        "lte": xx
      }
    }
  }
}

清理数据以后,merge是异步的,可能删除数据以后,不会立即释放doc 数量。 还是需要merge

方案四
直接forcemerge 清理已经标记删除的数据。

POST /索引名/_forcemerge

如果只merge 超过 index.merge.policy.expunge_deletes_allowed(默认10)配置的segment
添加参数

POST /索引名/_forcemerge?only_expunge_deletes=true

放入后台执行
POST /索引名/_forcemerge?only_expunge_deletes=true&wait_for_completion=false

把segment合并到 max_num_segments个segment
比如合并成一个segment
POST /.ds-my-data-stream-2099.03.07-000001/_forcemerge?max_num_segments=1

调大max_num_segments 可以增加merge速度。

使用这个命令POST /索引名/_forcemerge?only_expunge_deletes=true&wait_for_completion=false
1.5T的数据大概用了7个小时merge完毕文章来源地址https://www.toymoban.com/news/detail-772387.html

到了这里,关于es sharding 文档数量超过最大限制,写入失败的4种解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序-上传代码失败,提示分包大小超过限制

    开发者可通过开发者工具中的性能扫描工具提前发现代码中的可优化项: 1. 代码包不包含插件大小超过 1.5 M 【建议】小程序代码包单个包大小限制为2M。因此我们建议开发者在开发时,如果遇到单包体积大于1.5M的情况,可以采取分包的方式,把部分代码拆分到分包去,降低

    2024年02月16日
    浏览(32)
  • 自定义Mybatis-plus插件(限制最大查询数量)

    需求背景 ​一次查询如果结果返回太多(1万或更多),往往会导致系统性能下降,有时更会内存不足,影响系统稳定性,故需要做限制。 解决思路 1.经分析最后决定,应限制一次查询返回的最大结果数量不应该超出1万,对于一次返回结果大于限制的时候应该抛出异常,而不

    2023年04月19日
    浏览(66)
  • java使用ElasticSearch的scroll查询,高效的解决es查询数量的限制。

    (1)首先我们要明白es的查询机制:ES的搜索是分2个阶段进行的,即 Query阶段和Fetch阶段 。 Query阶段 比较轻量级,通过查询倒排索引,获取满足查询结果的文档ID列表。 Fetch阶段 比较重,需要将每个分片的查询结果取回,在协调结点进行 全局 排序。 通过From+size这种方式分批

    2024年02月03日
    浏览(69)
  • Elasticsearch(五)--ES文档的操作(上)---写入文档

    使用ES构建搜索引擎时需要经常对文档进行操作,除了简单的单条文档操作,有时还需要进行批量操作。我们这章主要学习ES文档的增删改的操作,由于涉及到的代码量会比较多,所以分为3篇文章分别说明文档的这个三个操作。那么我们对文档操作的学习除了在kibana客户端之

    2024年01月16日
    浏览(28)
  • MinIO-设置数据校验分片数量(parity shard)

    设置奇偶校验值,是为了可用性和总可用存储量之间的平衡。较高的奇偶校验值以可用存储为代价提高了驱动器或节点故障的恢复能力;较低的奇偶校验值提供了最大限度的存储,同时降低了对驱动器或节点故障时的容忍度。 下表列出了由 1 个节点和 16 个 1TB 驱动器组成的

    2024年02月06日
    浏览(30)
  • Java实现读取转码写入ES构建检索PDF等文档全栈流程

    之前已简单使用ES及Kibana和在线转Base64工具实现了检索文档的demo,并已实现WebHook的搭建和触发流程接口。 传送门: 基于GitBucket的Hook构建ES检索PDF等文档全栈方案 使用ES检索PDF、word等文档快速开始 总体思路:基于前面已经搭建的WebHook触发流程,接收到push更新消息之后,使用

    2024年03月10日
    浏览(50)
  • ElasticSearch返回值数量超过10000条解决方案

    环境 : Centos7 + ES 7.9.0 集群 Elasticsearch官方默认限制索引查询最多只能查询10000条数据,查询第10001条数据开始就会报错: 但是很多时候10000数据不能满足项目的需求,所以我们就要解除这个限制。 elasticsearch中 max_result_window 有上限限制:默认10000。 在 restful 请求时,解除索引最

    2023年04月16日
    浏览(31)
  • 如何解决elasticsearch分页总数量超过10000条就报错

    默认情况下,Elasticsearch集群中每个分片的搜索结果数量限制为10000。这是为了避免潜在的性能问题。具体报错信息如下: 但是,可以通过以下几种方法解决这个问题。 1. 使用scroll API:scroll API可以帮助我们在不加载所有数据的情况下获取所有结果。它会在后台执行查询以获取

    2024年02月17日
    浏览(39)
  • 小程序包大小超过限制

    1.在pages.json文件中配置分包 2.在manifest.json文件中配置一下分包优化 使用分包可以减轻主包的体积 (注意每个分包也是不能超过2MB的) 1.在pages.json文件的顶部配置一条运行脚本(不清楚实际有没有生效) 2.找到package.json文件 运行npm run dev:mp-weixin是没有压缩的 运行npm run dev:mp-weixi

    2024年02月08日
    浏览(29)
  • 堆栈深度超过限制

    报错:Cause: com.kingbase8.util.KSQLException: 错误: 堆栈深度超过限制 Hint: 在确定了平台的堆栈深度限制是足够大后,增加配置参数 \\\"max_stack_depth\\\"的值(当前值为2048kB).; 错误: 堆栈深度超过限制 Hint: 在确定了平台的堆栈深度限制是足够大后,增加配置参数 \\\"max_stack_depth\\\"的值(当前值为

    2024年02月10日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包