NiFi 首先是一个 JVM 应用,其次最上层是一个 web server.我们就从这里入手开始阅读 NiFi 的源码.
要分析 maven 工程的源码,首要看的就是 pom 文件,通过 pom 文件,我们能够得知这个工程的大概.可以发现,这394个 pom 工程大部分是子工程,都是一层套一层的父子pom 工程.那么我们首先找到最顶级的pom 工程,也就是 nifi:
这么一看,整个 NiFi 工程还是清晰了一些.
- nifi-api 就是 nifi 的应用程序接口,里面就是定义了整个工程所需要用到的接口,注解,抽象类和枚举等基本的接口和信息.
- nifi-assembly 负责 nifi 的成品装配, 工程打包最后形成的可供部署的压缩包就在这个工程里的 target 目录内.
- nifi-bootstarp 负责 nifi 这个 jvm 应用程序的启动相关事宜
- nifi-commons nifi诸多特性,比如data-provenance,expression-language,s2s 传输 的实现就在这里,同时也是 nifi 的工具类集合
- nifi-docker nifi的 docker 应用相关
- nifi-docs nifi 的文档 实现相关
- nifi-external nifi内部元信息和外部交换,主要用于集群模式下
- nifi-framework-api 这就是nifi 核心框架层的api,也就是架构图中的 Flow Controller 那一层,注意这里只是各种接口信息定义,不是实现.
- nifi-maven-archetypes 这里只是为了生成两个 maven archetype,一个是 nifi 自定义处理器的脚手架,一个是 nifi 自定义服务的脚手架.这些脚手架在 maven 的中央仓库都有提供.
- nifi-mock 用于 nifi 的 mock 测试
- nifi-nar-bundles 之前一直说的 nifi java 工具箱就是这里了.整个 nifi 里面大部分的 maven 工程都是这个工程的子工程.在这个工程里面,一个 bundle 就是一个工具,也对应着上面架构图里的 Extension
- nifi-toolkit 这里面是 nifi 的命令行工具的实现.nifi 也提供了比较丰富的命令行指令.
以上就是 NiFi 源码的总体结构了.有了总体的概览以后,我们需要研究哪一方面的源码实现,就可以直接去相应的 module 里面看了.