Apache Nifi处理器就像是同步多个流文件的障碍

时间:2016-05-28 16:59:40

标签: apache-nifi

我正在评估Nifi的ETL流程。 我想构建以下流程: 从SQL数据库中获取大量数据 - >分成1000块记录 每个 - >计算每个块中的错误记录 - >计算错误总数 记录 - >如果它超过阈值失败过程 - >否则将每个块保存到数据库中。

我无法解决的问题是如何等待所有块验证。 例如,如果我有5个验证任务同时工作,我需要一些 等待直到处理完所有块并且仅在此之后的障碍 运行错误计数处理器,因为我不想保存无效数据和 如果达到阈值,则删除它。

我遇到的另一个问题是,是否有可能运行此问题 验证处理器在多个节点上并行并且仍然具有 等到他们全部完成的可能性。

2 个答案:

答案 0 :(得分:1)

对此的一个解决方案是使用ExecuteScript处理器作为"安全阀"在第一次收到具有特定属性值的流文件时触发内存中的简单计数(存储在local/cluster state中,基本上是密钥attribute-value到值count的映射。一旦该值达到阈值,您就可以生成新的流文件以路由到包含已完成的属性值的成功关系。在这种情况下,将其他结果(需要批处理的流文件)发送到MergeContent处理器,并将最小批处理大小设置为您喜欢的任何值。阀门的后续处理器应将调度策略设置为Event Driven,以便它仅在从阀门接收流文件时运行。

答案 1 :(得分:0)

更新分布式MapCache中的计数并不是正确的方法,因为提取和更新是分开的,不能在只增加计数的原子处理器中进行。

http://apache-nifi-users-list.2361937.n4.nabble.com/How-do-I-atomically-increment-a-variable-in-NiFi-td1084.html