Nifi QueryDatabaseTable处理器作为Docker映像运行会导致数据丢失

Nifi QueryDatabaseTable处理器作为Docker映像运行会导致数据丢失,docker,apache-nifi,Docker,Apache Nifi,在NiFi中运行querydatabase处理器时,一些记录丢失 我试图从Oracle DB中提取数据,最大列值是日期数据类型的创建日期。没有附加时间戳(18年6月23日)。在每5分钟触发一次作业以实现近实时摄取的同时,一些记录正在丢失。我不确定这是否是由于表中不存在时间戳造成的,或者这是否可能是一个同步问题,例如,如果插入了新记录,则在查询数据库时会出现同步问题。通常,QueryDatabaseTable(QDT)必须以与最大值列中的值相称的速率进行调度。使用日期类型的最大值列(无时间戳)意味

在NiFi中运行querydatabase处理器时,一些记录丢失


我试图从Oracle DB中提取数据,最大列值是日期数据类型的创建日期。没有附加时间戳(18年6月23日)。在每5分钟触发一次作业以实现近实时摄取的同时,一些记录正在丢失。我不确定这是否是由于表中不存在时间戳造成的,或者这是否可能是一个同步问题,例如,如果插入了新记录,则在查询数据库时会出现同步问题。通常,QueryDatabaseTable(QDT)必须以与最大值列中的值相称的速率进行调度。使用日期类型的最大值列(无时间戳)意味着您每天只应检查新值(即安排QDT处理器),而不是每5分钟检查一次。否则,处理器如何知道获取自上次检查以来的当前日期的行?它只查看日期,并且(假设)会抓取具有该日期值的所有数据,从而导致重复数据,或者(按照其实际行为)会查找具有第二天值的数据,直到第二天才能找到,这也会导致数据丢失

可能的解决方法是将QDT安排为每天运行一次,或添加/更改列以包含时间戳并相应地安排QDT,或使用不同的列(可能通过DB视图)作为最大值列,该列始终为每一新行递增


希望有一天还会有一个Oracle CDC处理器(可能利用LogMiner)来近实时地获取更改,如果更改在具有相同质量的表中可用,可能有一种方法可以使用QDT和Oracle/LogMiner表来模拟此功能(即,一个最大值列,它总是将w.r.t.增加到QDT的运行计划中)。

您能发布到目前为止您拥有的NiFi模板吗?也许它不是正确的位置,但是NiFi支持Oracle/LogMiner集成吗?我找不到这个。在撰写本文时没有。有一个开放的Jira()要添加XStream支持,您可以使用类似ExecuteSQL的东西自己读取向LogMiner公开的表