Nifi 作为一个数据流处理引擎,感觉对于程序员来说已经非常友好了。
可以算作半个 AI 了。
最近接受到一个需求,需要同步一个国家的数据。
表有若干,数据实时成都是分钟级别。
刚开始没有接触过这样的需求,有点懵逼。后来想起 Nifi 可以作为中间传输工具。
但是问题的难点是 nifi 并没有现成的可用的 processor 符合自己的要求。
因为要求对数据库不能有太大的压力,因此废弃了 GenerateTableFetch 这个控件。
想想既然要同步 oracle 的数据,那么万一出现意外,还需要可以及时重新从某个点重新同步,还需要某时刻可以迅速产生多条任务用于弥补数据。
哎,最终觉得就自己写吧,幸好Nifi 还有 ExceuteScript 这个控件。说干就干,选择python 语言。
第一:需要用一个 State ,用于记录上一次的时间点,其次变更时间点的前提必须是 修改后的时间点小于当前系统时间,不然就丑大了,导未来时间点数据,肯定是一条也没有的。
nowTime=long(round(1000*time.time()))oldTime =stateMap.get('oldTime')interval=long(str(interval.getValue()))
这里的 nowTime 就是系统时间。
oldTime 就是上一次的时间,interval就是每次变更的时间跨度。
当然既然是导表的数据,肯定还需要 表的字段,表名,其次为了可能出现的数据库延迟,还需要设定一个延迟时