【问题标题】:NiFi memory managementNiFi 内存管理
【发布时间】:2019-11-16 20:27:57
【问题描述】:

我只是想了解我们应该如何规划 NiFi 实例的容量。

我们有一个 NiFi 实例,它有大约 500 个流。因此,NiFi 画布上启用的处理器总数约为 4000。我们确实同时运行 2-5 个流,这不会超过半小时,即我们以 MB 为单位处理数据。

到目前为止它运行良好,但我们经常看到 outofMemory 错误。所以我们将 xms 和 xmx 参数从 4g 增加到 8g,这已经解决了现在的问题。但是接下来我们会有更多的流量,我们可能会再次面临内存不足的问题。

那么,任何人都可以提供容量规划矩阵或任何建议来避免此类问题发生之前吗?例如:- 如果我们启用了 3000 个处理器,有/没有任何处理,则需要 Xg 数量的内存。

我们将不胜感激有关 NiFi 容量规划的任何意见。

提前致谢。

【问题讨论】:

  • 这实际上取决于您使用的处理器、流文件的大小以及您在 nifi.xml 中定义的运行线程总数。一些处理器将完整的流文件加载到内存中。显示内存不足的处理器、流文件的大小和线程数。
  • 感谢 daggett 的想法!!是的,我同意它还取决于流文件的大小和正在运行的线程。但只有 2-3 个流同时运行,每个流有 100 MB 数据。所以我认为画布中没有线程的启用处理器也在消耗内存。
  • 例如 updateattribute 处理器消耗如此低的内存,以至于您可以拥有 1000 多个线程而无需 oom 与 4g 内存。所以,问题仍然存在:您使用的是什么处理器,以及它们中的哪一个会引发 oom。
  • 让我在这里添加更多内容!一切都在我们有 400 个流的时候,一切都很好。我们的所有流或多或少都相同,当时我们同时运行 2-5 个流,大约 100 MB。我完全理解您提出的观点,但我的问题是,如果我们创建 1000 个流,那么它是否也会消耗内存?每个处理器如何计算它?注意 - 任何流中都没有活动线程。
  • 您的 nifi 流中的处理器数量几乎不会影响内存。但是sandwich menu -> controller settings -> general中的线程数+处理器类型+流文件大小确实会影响内存。

标签: bigdata apache-nifi apache-minifi


【解决方案1】:

OOM 错误可能因特定的内存消耗处理器而发生。例如:SplitXML 正在将您的整个记录​​加载到内存中,因此它可以加载一个 1GiB 的文件。

每个处理器都可以记录应该考虑哪些资源。所有 Apache 处理器(据我所知)都记录在案中,因此您可以依赖它们。

顺便说一下,在我们的示例中,SplitXML 可以替换为 SplitRecord,它不会将所有记录加载到内存中。

因此,即使您同时使用 1000 个处理器,它们消耗的内存也可能不会像一个将整个 FlowFile 内容加载到内存的处理器那样多。

检查您正在使用哪些处理器,并确保您不使用这样的处理器(还有更多这样的处理器将整个文档加载到内存中)。

【讨论】:

  • 谢谢!!但只有 2-3 个流同时运行,每个流有 100 MB 数据。所以我认为画布中没有线程的启用处理器也在消耗内存。
猜你喜欢
  • 1970-01-01
  • 2011-07-21
  • 2012-03-21
  • 1970-01-01
  • 2016-10-12
  • 1970-01-01
相关资源
最近更新 更多