【问题标题】:When does ElasticSearch performs a flushElasticSearch 何时执行刷新
【发布时间】:2023-03-06 18:59:02
【问题描述】:

在 ElasticSearch 节点/索引/分片中触发刷新的条件是什么?

关于 ElasticSearch 每秒刷新一次并以较低频率刷新以避免密集 CPU 使用的流程有很好的解释,但是哪个组件负责执行刷新?

我试图查看源代码,但没有找到合适的位置。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    没有固定的间隔,Elasticsearch使用一些启发式来判断何时调用flush为mentioned in the official doc

    Elasticsearch 会根据需要自动触发刷新,使用 权衡未刷新事务日志大小的启发式方法 抵消执行每次冲洗的成本。

    正如 Elastic 团队成员在 at the end of this SO answer 中解释的那样,这种启发式方法取决于

    取决于有多少操作被添加到事务日志中,如何 它们很大,最后一次刷新发生的时间。

    注意:您也可以调整刷新操作的设置,但不推荐。

    编辑:https://github.com/elastic/elasticsearch/blob/master/server/src/main/java/org/elasticsearch/action/bulk/BulkProcessor.java#L48 是处理刷新操作的源代码。

    【讨论】:

    • 非常感谢。我对这些启发式的实际逻辑感兴趣,假设它们记录在某处或至少在 ES 源代码中实现。
    • 一定给我时间让你知道
    • @OfekHod,如果您阅读了此类的 Javadoc,我查看了 Elasticsearch 源代码并找到了github.com/elastic/elasticsearch/blob/master/server/src/main/…(允许轻松设置何时“刷新”新的批量请求 *(基于动作的数量,基于大小或时间))
    • @OfekHod,您可以在多个位置找到此批量处理器的引用,但最终刷新是由调用系统可以根据三个参数(动作、大小和时间)调度的调度完成的。我希望这些信息能够回答您的问题。
    • @OfekHod 你还可以看到github.com/elastic/elasticsearch/blob/master/x-pack/plugin/… 中的 watcher.java 在 close() 方法下调用了这个刷新操作。
    猜你喜欢
    • 2021-10-10
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    相关资源
    最近更新 更多