es BulkProcessor踩坑记录:es索引模板生成索引分区不正确

背景

使用es bulkProcessor批量插入数据时,发现一个按月分区的索引模板,生成索引的命名却不是规范的,同时存在按月和按日的索引。导致数据更新、删除的时候,无法找到正确的分区。
起初,我以为导致该问题的的原因是分区时间字段格式不正确。后来才知道,是因为和其他按日分区的索引模板使用了同一个BulkProcessor。按日分区的索引模板写数据并发比较高,使用同一个BulkProcessor的时候,不同的分区规则产生了相互影响。

什么是BulkProcessor?

BulkProcessor 是 Elasticsearch 的一个高级客户端 API,它允许您在一次批量操作中执行大量的索引、更新和删除请求。此外,BulkProcessor 还提供了并发和异步处理功能。
BulkProcessor 的实现原理主要包括以下几个方面:

  1. 缓冲区:在 BulkProcessor 内部维护一个缓冲区(通常是一个List或者Queue),用于存储暂时还未发送给 Elasticsearch 服务器的文档。当你添加新文档到 BulkProcessor 时,这些文档会先被放入缓冲区。

  2. 触发条件:BulkProcessor 允许您设置三种触发条件来确定何时将缓冲区中的数据发送至 Elasticsearch 进行批量操作:

    • 文档数量:当达到一定数量的文档时触发。
    • 数据大小:当存储的数据总大小超过指定阈值时触发。
    • 时间间隔:每隔特定时间间隔就会将已有记录发送出去。
  3. 执行器线程池和异步处理: 当满足任意一个触发条件,BulkProcessor 就开始执行批量操作。为了实现异步非阻塞式调用方式, Bulk Processor 使用 ExecutorService 提供了多线程支持,并且回调函数允许进行失败重试和错误策略配置。

  4. 监听器回调: 可以通过实现 org.elasticsearch.action.bulk.BulkProcessor.Listener接口来设定关联监听器,在不同状态下如成功、失败、重试等情景里回调对应方法进行相对应操作。

  5. 关闭与清理: 在使用完毕后需要及时关闭BulkProcessors对象释放资源;此外,在关闭之前需要确保所有正在运行中得任务完成并清空内部队列避免数据丢失。

避免使用同一个BulkProcessor处理不同的索引模板数据

尽管 BulkProcessor 支持同时对多个索引模板进行写入操作,但这种情况可能会遇到两方面的问题:

  1. 配置不同索引模板:每个 BulkRequest 可以包含针对不同索引(具有不同映射和设置)的文档。然而,默认情况下,在创建 BulkProcessor 时需要指定一个固定的 Index Template 或者在构建每个请求时提供自定义配置。

  2. 性能:使用单个 Bulk Processor 同时写入多种类型数据可以导致性能受限,特别是当涉及很大数量或者非常复杂数据时。因为 Elasticsearch 必须解析所有文档并确定它们分配到哪些分片上去。较好地方式是使用多个BulkProcessor来处于各自独立的线程中以实现更有效率地工作负载平衡。

总之,在某些场景下,单个 BulkProcessor 可以同时写入不同索引模板的数据,但可能存在配置复杂度高和性能受限等问题。

每一个BulkProcessor其实对应一个线程池,它起到了资源隔离的作用。

总结

  • BulkProcessor 是 Elasticsearch 的一个高级客户端 API,它允许您在一次批量操作中执行大量的索引、更新和删除请求。
  • 不同的BulkProcessor最好对应不同的索引模板,这满足资源隔离的数据管理要求。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子涵先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值