索引压力编辑

将文档索引到 Elasticsearch 中会以内存和 CPU 负载的形式引入系统负载。每个索引操作都包括协调、主节点和副本节点阶段。这些阶段可以在集群中的多个节点上执行。

索引压力可以通过外部操作(例如索引请求)或内部机制(例如恢复和跨集群复制)来累积。如果系统中引入了过多的索引工作,集群可能会变得饱和。这会对其他操作产生负面影响,例如搜索、集群协调和后台处理。

为了防止出现这些问题,Elasticsearch 会在内部监控索引负载。当负载超过特定限制时,新的索引工作将被拒绝。

索引阶段编辑

外部索引操作经历三个阶段:协调、主节点和副本节点。请参阅基本写入模型

内存限制编辑

indexing_pressure.memory.limit 节点设置限制了可用于未完成索引请求的字节数。此设置默认为堆的 10%。

在每个索引阶段开始时,Elasticsearch 会计算索引请求消耗的字节数。此计算仅在索引阶段结束时释放。这意味着上游阶段将计入请求开销,直到所有下游阶段完成。例如,协调请求将一直计入,直到主节点和副本节点阶段完成。主节点请求将一直计入,直到每个同步副本节点都已响应以启用副本节点重试(如有必要)。

当未完成的协调、主节点和副本节点索引字节数超过配置的限制时,节点将在协调或主节点阶段开始拒绝新的索引工作。

当未完成的副本节点索引字节数超过配置限制的 1.5 倍时,节点将在副本节点阶段开始拒绝新的索引工作。这种设计意味着,随着节点上索引压力的增加,它们会自然地停止接受协调和主节点工作,而优先处理未完成的副本节点工作。

indexing_pressure.memory.limit 设置的 10% 默认限制是相当宽松的。您应该在仔细考虑后才更改它。只有索引请求才会计入此限制。这意味着还有额外的索引开销(缓冲区、侦听器等)也需要堆空间。Elasticsearch 的其他组件也需要内存。将此限制设置得太高可能会导致其他操作和组件无法获得足够的运行内存。

监控编辑

您可以使用节点统计信息 API 来检索索引压力指标。

索引压力设置编辑

indexing_pressure.memory.limit logo cloud
可由索引请求消耗的未完成字节数。当达到或超过此限制时,节点将拒绝新的协调和主节点操作。当副本节点操作消耗 1.5 倍于此限制时,节点将拒绝新的副本节点操作。默认为堆的 10%。