【问题标题】:Elastic search bulk upload slows over time弹性搜索批量上传会随着时间的推移而变慢
【发布时间】:2016-07-28 16:01:05
【问题描述】:

我正在将大量数据集从动态搜索导出到弹性搜索。 步骤如下:

  1. 从 SQL 获取数据(我正在使用实体框架)。让我们将主要类型命名为联系人。
  2. 然后我按定义的大小对数据进行分组并对其进行序列化。
  3. 按照ES Docs 格式化数据以进行批量上传
  4. 调用HttpPost,将数据发送到ES Endpoint。

我正在对所花费的时间和任何错误进行大量日志记录。

一切正常,我的导出功能在一小时内导出数据。

也就是说,我观察到 HttpPost 的响应时间不断增加。我已经寻找了我可能拥有的任何内存泄漏,或者我应该处理和没有处理的任何东西。我想确保它以后不会困扰我。

那么,响应时间增加的可能原因是什么? 我应该如何着手调查这个问题?

【问题讨论】:

    标签: c# elasticsearch bulkinsert


    【解决方案1】:

    我使用 ES 1.7,并使用类似的场景索引了大约 1000 万份文档。 根据我的经验,如果你将 ES 推到硬,它会变慢,有时会因 OutOfMemory 异常而失败。 我不知道新版本是否仍然存在问题。

    恕我直言,这是因为 ES 需要一些时间来处理批量数据 - 它接受数据,对其进行索引,但之后它会做一些后台工作来优化索引。

    为了克服这个问题,我尝试了以下参数:单个块大小 (N)、索引块之间的睡眠时间 (S1),以及几个 (M) 块之间的睡眠时间更长 (S2)。 对于我的数据集和我的硬件,我以 N=5000, S1=1s, M=10, S2=10s 结束。 为了选择安全值,我观察了 CPU、内存和 I/O 的使用情况。例如,长时间增加 I/O 使用率可能表明 ES 将很快中断。

    我确信它非常依赖于你拥有的硬件,尤其是给 ES 尽可能多的内存!

    【讨论】:

    • 这对我有用。我基本上找到了批量上传的最佳位置。
    猜你喜欢
    • 2014-02-04
    • 2012-11-25
    • 2018-06-25
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    相关资源
    最近更新 更多