Apache NiFi 调整问题
Apache NiFi tuning issues
我已经为 HDFS 中的数据摄取开发了一个 NiFi 流原型。现在我想提高整体表现,但似乎我真的无法前进。
流程接收输入的 csv 文件(每行有 80 个字段),在行级别拆分它们,对字段应用一些转换(使用顺序执行的 4 个自定义处理器),将新行缓冲到 csv 文件中,将它们输出到 HDFS。我以这种方式开发了处理器,当读取每个单独的记录并将其字段移动到流文件属性时,流文件的内容仅被访问一次。已在亚马逊 EC2 m4.4xlarge 实例(16 核 CPU、64 GB RAM)上执行测试。
这是我目前尝试的方法:
- 将流文件存储库和内容存储库移动到不同的 SSD 驱动器上
- 移动了内存中的来源存储库(NiFi 跟不上事件率)
- 根据configuration best practices
配置系统
- 我试过为每个处理器分配多个线程,以达到不同数量的总线程
- 我已经尝试增加 nifi.queue.swap.threshold 并将背压设置为永远不会达到交换限制
- 尝试了从 8 到 32 GB 的不同 JVM 内存设置(结合 G1GC)
- 我试过增加实例规格,没有任何变化
从我执行的监控来看,磁盘似乎不是瓶颈(它们大部分时间基本上是空闲的,表明计算实际上是在内存中执行的)和平均值 CPU 负载低于 60%。
我最多能拿到215krows/minute,也就是3,5krows/second。从体积上来说,它只是 4,7 MB/s。我的目标绝对比这更伟大。
的
作为比较,我创建了一个读取文件的流程,将其拆分成行,将它们合并成块并输出到磁盘上。这里我得到 12k rows/second,或 17 MB/s。看起来也不是特别快,让我觉得我可能做错了什么。
的
有没有人对如何提高性能有建议?我将从集群上的 运行 NiFi 中受益多少,而不是随着实例规格的增加而增长?谢谢大家
事实证明,性能不佳是开发的自定义处理器和合并内容内置处理器的结合。 same question mirrored on the hortonworks community forum 得到了有趣的反馈。
关于第一个问题,建议是在processors上加上SupportsBatching
注解。这允许处理器将多个提交批处理在一起,并允许 NiFi 用户从配置菜单中选择处理器执行的延迟或吞吐量。可以在文档 here.
上找到更多信息
另一个发现是 MergeContent
内置处理器本身似乎没有最佳性能,因此如果可能的话应该考虑修改流程并避免合并阶段。
我已经为 HDFS 中的数据摄取开发了一个 NiFi 流原型。现在我想提高整体表现,但似乎我真的无法前进。
流程接收输入的 csv 文件(每行有 80 个字段),在行级别拆分它们,对字段应用一些转换(使用顺序执行的 4 个自定义处理器),将新行缓冲到 csv 文件中,将它们输出到 HDFS。我以这种方式开发了处理器,当读取每个单独的记录并将其字段移动到流文件属性时,流文件的内容仅被访问一次。已在亚马逊 EC2 m4.4xlarge 实例(16 核 CPU、64 GB RAM)上执行测试。
这是我目前尝试的方法:
- 将流文件存储库和内容存储库移动到不同的 SSD 驱动器上
- 移动了内存中的来源存储库(NiFi 跟不上事件率)
- 根据configuration best practices 配置系统
- 我试过为每个处理器分配多个线程,以达到不同数量的总线程
- 我已经尝试增加 nifi.queue.swap.threshold 并将背压设置为永远不会达到交换限制
- 尝试了从 8 到 32 GB 的不同 JVM 内存设置(结合 G1GC)
- 我试过增加实例规格,没有任何变化
从我执行的监控来看,磁盘似乎不是瓶颈(它们大部分时间基本上是空闲的,表明计算实际上是在内存中执行的)和平均值 CPU 负载低于 60%。
我最多能拿到215krows/minute,也就是3,5krows/second。从体积上来说,它只是 4,7 MB/s。我的目标绝对比这更伟大。 的 作为比较,我创建了一个读取文件的流程,将其拆分成行,将它们合并成块并输出到磁盘上。这里我得到 12k rows/second,或 17 MB/s。看起来也不是特别快,让我觉得我可能做错了什么。 的 有没有人对如何提高性能有建议?我将从集群上的 运行 NiFi 中受益多少,而不是随着实例规格的增加而增长?谢谢大家
事实证明,性能不佳是开发的自定义处理器和合并内容内置处理器的结合。 same question mirrored on the hortonworks community forum 得到了有趣的反馈。
关于第一个问题,建议是在processors上加上SupportsBatching
注解。这允许处理器将多个提交批处理在一起,并允许 NiFi 用户从配置菜单中选择处理器执行的延迟或吞吐量。可以在文档 here.
另一个发现是 MergeContent
内置处理器本身似乎没有最佳性能,因此如果可能的话应该考虑修改流程并避免合并阶段。