【问题标题】:NiFi: ListFile Processor is not detecting file changes sometimesNiFi:ListFile 处理器有时未检测到文件更改
【发布时间】:2019-12-09 03:08:17
【问题描述】:

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

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

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

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

更新

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

【问题讨论】:

  • 尝试确保ListFile 处理器具有以下配置:Minimum File Age=0 sec、Maximum File Age is empty、Minimum File Size=0B、Maximum File Size is empty。
  • 您能否展示一下您的ListFile 配置?您使用的是哪个版本的 NiFi?
  • 你使用什么版本的 NiFi?我刚刚在 1.5.0 中检查过它,它工作正常。
  • @JagrutSharma - 最小/最大属性保留为默认值,与您提到的匹配(最小文件年龄=0 秒,最大文件年龄为空,最小文件大小=0B,最大文件大小是空的)。
  • 也许处理器维护的时间戳搞砸了……你试过清除它的状态吗?此选项在 ListFile 运行时被禁用。停止处理器 -> 右键单击​​ -> 查看状态 -> 清除状态。一旦处理器再次启动,所有匹配的文件都应该被拾取,无论这些文件是否已经被处理。

标签: apache-nifi


【解决方案1】:

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

  1. 姓名
  2. 尺寸
  3. 上次修改时间戳

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多