Apache NiFi是由美国过国家安全局(NSA)贡献给Apache基金会的开源项目,其设计目标是自动化系统间的数据流。基于其工作流式的编程理念,NiFi非常易于使用,强大,可靠及高可配置。两个最重要的特性是其强大的用户界面及良好的数据回溯工具(官网吹的)
nifi 使用起来还比较方便,基于web 的控制界面能够比较好的管理和控制数据流转,数据处理的业务流程也比较明确,下面说一下 如何定制开发一个基于我们自身业务的组件
1.工程结构
nifi对工程结构做了规范,我们只要按照他的格式创创建工程包 .nar,放到../lib/目录下,启动服务就能在页面组件中心找到并使用我们控件
1)简单的方式是在源码中打开一个nar 模块 ,根据我们的业务修改名称然后。。。(该怎么玩怎么玩,省去建立工程模块的麻烦)
2)就是要自己新建,那么总的来说 三步:
a.新建maven 模块 xxxx-xxx--bundle
pom.xml
说明依赖关系:
b. 在a模块下再新建 xxx-xxx-nar
pom.xml 说明依赖关系
c.在a模块下新建 xxx-xxx-processors
pom.xml 说明依赖关系
具体操作看看 源码中的结构就明白了,这都不是重点
2.开发属于自己的功能组件
组件一般来说分为service 和processor 咱们先来说以下新建一个processor
总的来说分两步 1.组件功能开发,2组件声明(向外暴露)
组件功能开发,在xxx--xxx-processors 新建工程类xxxx.java
功能组件总的来说 也分为三个部分
a. 外界参数声明 2,输出关系声明 3,数据流触发操作
a.外界参数说明
如果我们的组件需要和外界做交互,需要外部传入参数那么就需要做参数声明
通过这种方式声明一个参数,nifi 自身提供了比较多的验证器 可以对参数做约束验证 大家自己看着玩
参数定义之后需要向外部暴露,需要重写getSupportedPropertyDescriptors 方法
nifi 还支持动态增加属性,方式差不多,大家自己看着玩。。。
2.定义转换关系
nifi 通过转换关系对数据做流转操作,所以我们组件中必须定义至少一个转换关系
同样关系定义完成,需要对外界暴露,就需要重写getRelationships
好了 到此 准备工作基本完成 ,下来就进入主体部分,操作文件流
3.文件流操作
nifi 是以FlwoFile 为处理单位的,数据可以抽象理解为一个个的flowfile 这也就是数据流了
nifi 数据处理是以重写onTriger 开始的
对于flowfile 的操作大致分为三中
1.读取 从数据流中读取数据内容
2.写 写入数据到flowfile中
3.读完写
这里完成逻辑处理之后 ,nifi 必须要将flowfile提交转换
好了 这里就完成了组件功能开发,下面对我们新开发的组件做一下声明,使其对外暴露
看好了 我只来一遍
好了 好了 都完成了 打包 放到nifi 安装目录下的lib目录下 重启服务就好了
你看 揍死这么神奇
好了好了 大家自由玩耍吧 ,我也是才接触这个 又不正确或不到位的地方多包涵,一起交流 相互学习 共同进步,第一次写blog 话有些多了
好了好了 end