Apache NiFi 调整问题

Apache NiFi tuning issues

我已经为 HDFS 中的数据摄取开发了一个 NiFi 流原型。现在我想提高整体表现,但似乎我真的无法前进。

流程接收输入的 csv 文件(每行有 80 个字段),在行级别拆分它们,对字段应用一些转换(使用顺序执行的 4 个自定义处理器),将新行缓冲到 csv 文件中,将它们输出到 HDFS。我以这种方式开发了处理器,当读取每个单独的记录并将其字段移动到流文件属性时,流文件的内容仅被访问一次。已在亚马逊 EC2 m4.4xlarge 实例(16 核 CPU、64 GB RAM)上执行测试。

这是我目前尝试的方法:

从我执行的监控来看,磁盘似乎不是瓶颈(它们大部分时间基本上是空闲的,表明计算实际上是在内存中执行的)和平均值 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 内置处理器本身似乎没有最佳性能,因此如果可能的话应该考虑修改流程并避免合并阶段。