【问题标题】:Can Circuit break exception be avoided using horizontal scaling?可以使用水平缩放来避免断路异常吗?
【发布时间】:2017-10-13 15:50:55
【问题描述】:

我正在使用内部使用 elasticsearch 的 crate 1.0.2。所以我的问题适用于两者。对于某些查询,我会遇到断路异常。

CircuitBreakingException: [parent] 数据太大,[collect: 0] 的数据将大于 [11946544332/11.1gb] 的限制

这些查询主要在多个列上进行分组。我有数十亿个文档被索引,并分配了 16 GB 的 RAM 作为 crate 堆大小。我有多个这样的节点在一个集群中连接在一起。在集群中添加更多节点是否有助于消除此错误,并且我的相同查询是否可以正常运行?还是我必须将堆增加到 30 GB?我担心的是当我将它增加到 30GB 并且随着我添加更多数据时,有一天该查询将再次击中断路器。所以我想通过水平缩放来解决它,即添加更多节点。这会是更明智的决定吗?

【问题讨论】:

    标签: elasticsearch crate


    【解决方案1】:

    简短回答:通常水平缩放会有所帮助。

    您的错误似乎是由 group by 查询引起的。 GROUP BY 操作以分布式方式执行。所以更多的节点 通常会拆分负载,因此也会拆分内存使用量。 (确保 有足够的分片,以便它们分布在所有节点中)

    但有一个问题:最终数据需要在 您将初始查询发送到的节点。这通常很好,因为数据 到达预先聚合,但如果基数太高(例如 GROUP BY 在 主键),整个数据集必须适合这个协调器的内存 节点。

    如果您的节点有足够的内存来达到 30 GB(仍然有足够的 备用文件系统缓存),我个人倾向于增加 HEAP 大小 首先,在添加新节点之前。

    更新: 最近的版本 (2.1.X) 还包含一些关于断路器行为的修复。因此,如果可以更新,也建议这样做。

    更新2:

    请注意,在不同的情况下断路器可能会跳闸。在 您的情况是由 GROUP BY 占用大量内存引起的。但它可以 如果单个请求太大,也会被触发。例如,如果批量大小 太大。在这种情况下,更多的节点将无济于事。你必须减少 体积大小。

    【讨论】:

    • 感谢您的回复。我正在考虑如何在我的情况下实现这一目标。
    猜你喜欢
    • 2016-07-16
    • 2021-12-04
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多