【问题标题】:how Elasticsearch bulk API works with threadpoolElasticsearch 批量 API 如何与线程池一起工作
【发布时间】:2021-06-18 20:25:24
【问题描述】:

在尝试使用 python 的批量 API 索引大约 20000 条记录(每条记录的大小约为 100kb)时,我看到消耗的最大写入队列大小为 6。所以我对批量索引的以下理解是否正确(默认配置为 500 块和 100 mb 块大小)?

  1. 批量 API 将向 ES 发送 40 个请求 (20000/500)。
  2. 每个批量请求都以原子方式持久化,即全部 500 个块或无。
  3. 如果活动线程正忙,则批量请求将作为一个整体对象汇集在写入队列中。

【问题讨论】:

    标签: python elasticsearch elasticsearch-bulk-api


    【解决方案1】:
    1. 没错
    2. 不,每个批量操作都是独立的,肯定有可能有些通过而有些失败。您需要确保您的客户端代码能够处理此类情况并重试失败的批量操作。
    3. 所有批量操作都由write thread pool 处理。如果多个批量操作同时到达,那么其中一些将被处理(取决于接收批量操作的节点上的核数),不能处理的将被添加到队列中,其大小是 10000(这意味着 10000 个索引操作可以在处理之前排队)。一旦该队列被填满,索引操作将开始被拒绝 (HTTP 429)

    【讨论】:

    • 第三点,如果我们在一个批量请求中发送 500 个块,队列中会添加 500 个操作还是只添加一个?
    • 只添加一个操作,然后每个操作将被分派到正确节点上的正确分片。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 2017-01-29
    • 2018-01-20
    • 2020-08-12
    相关资源
    最近更新 更多