Elasticsearch bulk API 如何与线程池一起工作
how Elasticsearch bulk API works with threadpool
在尝试使用 python 的大容量 API 索引大约 20000 条记录(每条记录的大小约为 100kb)时,我看到消耗的最大写入队列大小为 6。我的以下内容也是如此对批量索引的理解是否正确(默认配置为 500 个块和 100 MB 块大小)?
- 批量 API 将向 ES 发送 40 个请求 (20000/500)。
- 每个批量请求都以原子方式持久化,即所有 500 个块或 none。
- 如果活动线程忙,那么批量请求将作为一个整体对象汇集在写入队列中。
- 没错
- 不,每个批量操作都是独立的,肯定有可能有些成功,有些失败。您需要确保您的客户端代码能够处理此类情况并重试失败的批量操作。
- 所有批量操作都由
write
thread pool 处理。如果多个批量操作同时到达,则其中一些将被处理(取决于接收批量操作的节点上的核数),而无法处理的将被添加到队列中,其大小是 10000(这意味着 10000 个索引操作可以在处理之前排队)。一旦该队列填满,索引操作将开始被拒绝 (HTTP 429)
在尝试使用 python 的大容量 API 索引大约 20000 条记录(每条记录的大小约为 100kb)时,我看到消耗的最大写入队列大小为 6。我的以下内容也是如此对批量索引的理解是否正确(默认配置为 500 个块和 100 MB 块大小)?
- 批量 API 将向 ES 发送 40 个请求 (20000/500)。
- 每个批量请求都以原子方式持久化,即所有 500 个块或 none。
- 如果活动线程忙,那么批量请求将作为一个整体对象汇集在写入队列中。
- 没错
- 不,每个批量操作都是独立的,肯定有可能有些成功,有些失败。您需要确保您的客户端代码能够处理此类情况并重试失败的批量操作。
- 所有批量操作都由
write
thread pool 处理。如果多个批量操作同时到达,则其中一些将被处理(取决于接收批量操作的节点上的核数),而无法处理的将被添加到队列中,其大小是 10000(这意味着 10000 个索引操作可以在处理之前排队)。一旦该队列填满,索引操作将开始被拒绝 (HTTP 429)