NiFi:ListFile Processor有时无法检测到文件更改

时间:2018-06-28 17:03:37

标签: apache-nifi

ListFile处理器未检测到对先前处理的文件的任何更改并对其进行重新处理。仅供参考,我已经尝试了以下选项进行重新处理,并且只有最后提到的hack才有效。这是在开发环境中运行的单节点NiFi中。

  • 更新方案:ListFile处理器未检测到文件内容更改并自动触发更新后(即,使用VIM编辑器进行文件更新)
  • 修改时间戳记方案:使用touch -c命令更改文件时间戳记会更改文件时间戳记,但这也不会导致ListFile处理器的自动触发。
  • 停止启动方案:如上所述,在更改文件后停止在NiFi中整个进程组的启动也不会引起ListFile处理器的触发。
  • 等待条款:文件更改后等待足够长的时间也无济于事-以防万一我们假设它会在某些延迟后自动触发。
  • Hack :我能够触发ListFile处理器重新处理文件的唯一方法是,以无害,幂等的方式更改ListFile处理器中“文件过滤器”的通配符表达式,例如从.*test.*\.csvtest.*\.csv,然后反之亦然(即像这样来回重复进行重复处理)。

对具有相同旧名称和已修改数据的文件进行重新处理是我们的要求。请帮忙!

有时,如果上游/下游出现意外数据问题,有时甚至需要强制重新处理未经修改的文件。请帮忙!

更新

仍然会遇到这种零星的行为!当ListFile处理器无法响应文件更改时,只有重新启动NiFi才有帮助。

1 个答案:

答案 0 :(得分:0)

这可能是延迟的答案。 像ListFiles / ListFtp / ListSftp等旧的List处理器仅使用时间戳跟踪策略来识别更改的文件。处理器用于在其处理器状态下缓存最后一次看到的时间戳,并使用它列出仅具有更大时间戳的文件。 但是,这种方法非常容易出错。因此,他们必须提出一种更好的策略,称为Entity Tracking。这种方法提供了广泛的  文件更改的监视范围。它跟踪指定目录中每个文件的以下参数。

  1. 名称
  2. 大小
  3. 最后修改的时间戳

文件的任何更改都反映在这些关键参数中。由于已将它们缓存,因此任何差异都被视为更改,因此更改的文件将显示在成功连接中。