Apache Nifi-流文件卡在队列中

时间:2019-05-09 09:36:47

标签: apache-nifi

流文件被卡在队列中(按属性进行负载平衡),并且不被下一个下游处理器(带有CSVReader和CSVRecordSetWriter的MergeRecord)读取。在Nifi用户界面中,似乎流文件在队列中,但是当尝试列出队列时,它说“队列中没有流文件”。尝试清空队列也会给出确切的消息。 Nifi日志没有与处理器相关的任何例外。队列中大约有80个流文件。

我尝试了以下操作项,但都没有用:

  • 重新启动下游和上游(ConvertRecord)处理器。
  • 禁用和启用CSVReader和CSVRecordSetWriter。
  • 已禁用负载平衡。
  • 流文件过期设置为3秒。

截屏: 流文件: enter image description here MergeRecord属性: enter image description here CSVReader服务: enter image description here CSVRecordSetWriter: enter image description here

4 个答案:

答案 0 :(得分:0)

这可能是因为流文件的内容已删除。但是,它的条目仍存在于流文件注册表中。

如果您有经过docker化的nifi设置并且没有繁重的生产流程,则可以停止您的nifi流程并删除_ * repository文件夹(flowfile-repository,内容存储库等)中的所有内容 (前提是您已装载所有目录,并且没有其他数据丢失风险)

让我知道您是否需要进一步的帮助

答案 1 :(得分:0)

在确保没有其他队列除了阻塞队列之外没有其他流文件之后,我们使用版本1.9设置了另一个新集群并将所有流文件从旧集群迁移到新集群。将较旧的群集升级到1.9版,看看是否可以解决这些问题而不会丢失任何数据。活动结束后会更新更多。

答案 2 :(得分:0)

您的合并记录处理器仅在主节点上运行,并且可能所有文件都在其他节点上(因为您正在进行负载平衡)。 NiFi 没有足够的意识注意到下游处理器仅在主节点上运行,因此它不会自动将所有内容重新平衡到主节点。只需将 MergeRecord 更改为在所有节点上运行即可允许文件通过。

唉,我还没有找到让所有流文件都回到主节点上的方法,你可以使用“单节点”负载均衡策略来获取同一节点上的所有文件,但不一定是初级。

答案 3 :(得分:0)

您的 FlowFiles 负载平衡方式存在错误配置。要进行检查,请停止您的 MergeRecord 处理器,以便能够检查和查看队列中的内容。

在显示的模式窗口中,您可以检查流文件在哪里等待,很可能您的流文件实际上在其他节点之一上,但由于 MergeRecord 在主节点上运行,因此它没有任何内容它的队列。