1、nifi-1.9.2介绍、单机部署及简单验证
2、NIFI应用示例-GetFile和PutFile应用
3、NIFI处理器介绍、FlowFlie常见属性、模板介绍和运行情况信息查看
4、集群部署及验证、监控及节点管理
5、NiFi FileFlow示例和NIFI模板示例
6、NIFI应用场景-离线同步Mysql数据到HDFS中
7、NIFI综合应用场景-将mysql查询出的json数据转换成txt后存储至HDFS中
8、NIFI综合应用场景-NiFi监控MySQL binlog进行实时同步到hive
9、NIFI综合应用场景-通过NIFI配置kafka的数据同步
本文主要介绍了NIFI是什麽、单机的部署、简单验证(以getFile为例)和相关组件。
本文的前提是安装好像对应的jdk即可。
本文分为三部分,即简单介绍、单机部署和组件介绍。
官网:https://nifi.apache.org/
开发文档:https://nifi.apache.org/docs.html
Apache NiFi 是一个易于使用,功能强大且可靠的系统,用于处理和分发数据。可以自动化管理系统间的数据流。它使用高度可配置的指示图来管理数据路由、转换和系统中介逻辑,支持从多种数据源动态拉取数据。NiFi原来是NSA的一个项目,目前已经代码开源,是Apache基金会的顶级项目之一。
NiFi是基于Java的,使用Maven支持包的构建管理。 NiFi基于Web方式工作,后台在服务器上进行调度。用户可以将数据处理定义为一个流程,然后进行处理,NiFi后台具有数据处理引擎、任务调度等组件。
简单的说,NiFi就是为了解决不同系统间数据自动流通问题而建立的。
虽然dataflow这个术语在各种场景都有被使用,但我们在这里使用它来表示不同系统间的自动化的可管理的信息流。
NiFi旨在帮助解决这些现代数据流挑战。
Apache NiFi supports powerful and scalable directed graphs of data routing, transformation, and system mediation logic.
Apache NiFi includes the following capabilities:
1、Browser-based user interface
2、Data provenance tracking
3、Extensive configuration
4、Extensible design
5、Secure communication
NiFi的基本设计概念与基于流程的编程fbp(Flow Based Programing)的主要思想密切相关。以下是一些主要的NiFi概念以及与FBP的关系:
此设计模型也类似于seda(分阶段),带来了很多好处,有助于NiFi成为非常有效的、构建功能强大且可扩展的数据流的平台。
其中一些好处包括但不限于:
从NiFi 1.0版本开始,NIFI集群采用了Zero-Master Clustering模式。NiFi群集中的每个节点对数据执行相同的任务,但每个节点都在不同的数据集上运行。Apache ZooKeeper选择单个节点作为集群协调器,ZooKeeper自动处理故障转移。所有集群节点都会向集群协调器发送心跳报告和状态信息。集群协调器负责断开和连接节点。此外,每个集群都有一个主节点,主节点也是由ZooKeeper选举产生。我们可以通过任何节点的用户界面(UI)与NiFi群集进行交互,并且我们所做的任何更改都将复制到集群中的所有节点上。
NIFI的设计目的是充分利用其运行的底层主机系统的能力。这种资源的最大化在CPU和磁盘方面尤其明显。
不同系统不同配置可预期的吞吐量或延迟会有很大差异,具体取决于系统的配置方式。由于大多数NiFi子系统都有可插拔的实现方法,所以性能取决于实现。但是,对于一些具体和广泛适用的地方,使用现成的默认实现。这些实现都是持久的,有保证的让数据流传递,并且是使用本地磁盘来实现。因此,假设在典型服务器中的普通磁盘或RAID卷上的每秒读/写速率大约为50 MB,对于大型数据流,NIFI应该能够有效地达到每秒100 MB或更多的吞吐量。这是因为预期添加到NiFi的每个物理分区和content repository都会出现线性增长。
Flow Controller充当引擎的角色,指示特定处理器何时可以被分配线程去执行。编译处理器并在执行任务后立即释放线程。可以为Flow Controller提供一个配置值,该值指示它维护的各种线程池的可用线程。理想的线程数取决于主机系统内核数量,系统中是否正在运行其他服务,以及流程中要处理的流的性质。对于典型的IO大流量,合理的做法是让多线程可用。
NiFi在JVM中运行,因此受限于JVM提供的内存。JVM垃圾回收(GC)成为限制实际堆总大小以及优化应用程序运行的一个非常重要的因素。NIFI作业在定期读取相同内容时可能会占用大量I/O。可以配置足够大的内存和磁盘以优化性能。
Apache nifi既可运行在Windows平台,也可运行在Linux平台,需要安装jdk(nifi 1.x以上需要jdk8以上,0.x需jdk7以上)和maven(至少3.1.0以上版本)。
Requires Java 8 or Java 11
Supported Operating Systems:
Linux
Unix
Windows
macOS
Supported Web Browsers:
Microsoft Edge: Current & (Current - 1)
Mozilla FireFox: Current & (Current - 1)
Google Chrome: Current & (Current - 1)
Safari: Current & (Current - 1)
FlowFile:每条"用户数据"(即用户带进NiFi的需要进行处理和分发的数据)称为FlowFile。FlowFile由两部分组成:Attributes 和 Content。Content是用户数据本身。Attributes是与用户数据关联的键值对。
Processor:处理器,是NiFi组件,负责创建,发送,接收,转换,路由,拆分,合并和处理FlowFiles。它是NiFi用户可用于构建其数据流的最重要的构建块。
版本地址:https://archive.apache.org/dist/nifi
本次下载的是当前最新的版本
https://archive.apache.org/dist/nifi/1.9.2/nifi-1.9.2-bin.tar.gz
对于Windows用户,进入安装NiFi的文件夹,在此文件夹中有一个名为bin的子文件夹。进入此子文件夹,然后双击run-nifi.bat文件。这将启动NiFi并让它在前台运行。要关闭NiFi,请选择已启动的窗口,按住Ctrl+C。
目前,仅支持Linux和Mac OS X用户作为服务进行NiFi的安装。要将应用程序作为服务去安装,首先进入安装目录,然后执行命令bin/nifi.sh install,这样就以默认名称nifi安装服务了。要为服务指定自定义名称,请使用可选的第二个参数(该服务的名称)执行该命令。例如,要将NiFi作为具有dataflow名称的服务安装,请使用该命令:bin/nifi.sh install dataflow。
安装后,可以使用适当的命令启动和停止服务,例如service nifi start 和service nifi stop。此外,可以通过执行service nifi status命令检查运行状态。
以linux版本为例, 解压并启动
## 下载目录为/usr/local/tools
# 进入目录
cd /usr/local/tools
# 解压文件
tar zxvf nifi-1.9.2-bin.tar.gz -C /usr/local/bigdata
# 得到目录: /usr/local/bigdata/nifi-1.9.2, 进入bin目录并查看目录内容
cd nifi-1.9.2/bin && ls
[root@server1 nifi-1.9.2]# pwd
/usr/local/bigdata/nifi-1.9.2
[root@server1 nifi-1.9.2]# cd bin
[root@server1 bin]# ll
总用量 32
-rwxrwx--- 1 root root 1872 3月 14 2019 dump-nifi.bat
-rwxrwx--- 1 root root 1120 3月 14 2019 nifi-env.bat
-rwxrwx--- 1 root root 1664 3月 14 2019 nifi-env.sh
-rwxrwx--- 1 root root 12087 3月 14 2019 nifi.sh
-rwxrwx--- 1 root root 1871 3月 14 2019 run-nifi.bat
-rwxrwx--- 1 root root 1832 3月 14 2019 status-nifi.bat
#web服务端启动的默认端口是8080,如果运行机器已经占用该端口的话,则需要修改
nifi-1.9.2/conf/nifi.properties
......
# web properties #
。。。
nifi.web.http.host=
nifi.web.http.port=38080 # 修改默认端口为: 38080
nifi.web.http.network.interface.default=
nifi.web.https.host=
nifi.web.https.port=
......
[root@server1 bin]# nifi.sh run
Java home: /usr/java/jdk1.8.0_144
NiFi home: /usr/local/bigdata/nifi-1.9.2
Bootstrap Config File: /usr/local/bigdata/nifi-1.9.2/conf/bootstrap.conf
2023-02-06 05:14:56,317 INFO [main] org.apache.nifi.bootstrap.Command Starting Apache NiFi...
2023-02-06 05:14:56,317 INFO [main] org.apache.nifi.bootstrap.Command Working Directory: /usr/local/bigdata/nifi-1.9.2
2023-02-06 05:14:56,317 INFO [main] org.apache.nifi.bootstrap.Command Command: /usr/java/jdk1.8.0_144/bin/java -classpath /usr/local/bigdata/nifi-1.9.2/./conf:/usr/local/bigdata/nifi-1.9.2/./lib/slf4j-api-1.7.25.jar:/usr/local/bigdata/nifi-1.9.2/./lib/nifi-framework-api-1.9.2.jar:/usr/local/bigdata/nifi-1.9.2/./lib/nifi-runtime-1.9.2.jar:/usr/local/bigdata/nifi-1.9.2/./lib/log4j-over-slf4j-1.7.25.jar:/usr/local/bigdata/nifi-1.9.2/./lib/nifi-nar-utils-1.9.2.jar:/usr/local/bigdata/nifi-1.9.2/./lib/jul-to-slf4j-1.7.25.jar:/usr/local/bigdata/nifi-1.9.2/./lib/jcl-over-slf4j-1.7.25.jar:/usr/local/bigdata/nifi-1.9.2/./lib/jetty-schemas-3.1.jar:/usr/local/bigdata/nifi-1.9.2/./lib/logback-classic-1.2.3.jar:/usr/local/bigdata/nifi-1.9.2/./lib/nifi-api-1.9.2.jar:/usr/local/bigdata/nifi-1.9.2/./lib/javax.servlet-api-3.1.0.jar:/usr/local/bigdata/nifi-1.9.2/./lib/logback-core-1.2.3.jar:/usr/local/bigdata/nifi-1.9.2/./lib/nifi-properties-1.9.2.jar -Dorg.apache.jasper.compiler.disablejsr199=true -Xmx512m -Xms512m -Djavax.security.auth.useSubjectCredsOnly=true -Djava.security.egd=file:/dev/urandom -Dsun.net.http.allowRestrictedHeaders=true -Djava.net.preferIPv4Stack=true -Djava.awt.headless=true -XX:+UseG1GC -Djava.protocol.handler.pkgs=sun.net.www.protocol -Dnifi.properties.file.path=/usr/local/bigdata/nifi-1.9.2/./conf/nifi.properties -Dnifi.bootstrap.listen.port=41344 -Dapp=NiFi -Dorg.apache.nifi.bootstrap.config.log.dir=/usr/local/bigdata/nifi-1.9.2/logs org.apache.nifi.NiFi
2023-02-06 05:14:56,385 INFO [main] org.apache.nifi.bootstrap.Command Launched Apache NiFi with Process ID 13550
# 使用 nifi.sh 进行单机运行操作, 常用参数如下:
# ./nifi.sh --help
# Usage nifi {start|stop|run|restart|status|dump|install}
## 以下是常用命令
# 启动
./nifi.sh start
# 关闭
./nifi.sh stop
# 重启
./nifi.sh restart
# 状态
./nifi.sh status
``
执行启动命令后, 需要等待 1 - 5分钟
http://server1:38080/nifi/
右键要配置的处理器, 会弹出配置项菜单, 如下图:
选项说明:
方式1: 右键选择 – > Configure
方式2: 鼠标左键双击处理器
配置分为4个部分: SETTING, SCHEDULING, PROPERTIES, COMMENTS
修改完成, 记得保存修改, 点击右下角的 “APPLY” 保存修改。
虽说是数据流输入点,但是并不是整体数据流的起点。它是作为组与组之间的数据流连接的传入点与输出点。
组相当于系统中的文件夹,作用就是使数据流的各个部分看起来更系统或模块化。
用于将来自多个Connections的数据合并到一个Connection中。
可以将若干组件组合在一起以形成更大的组,从该组创建数据流模版。这些模板也可以导出为XML并导入到另一个NiFi实例中,从而可以共享这些组。
Navigate是对工作区进行预览,点击放大缩小可调整视野,蓝框区域就是工作区当前的界面,可用鼠标在这部分进行移动从而调整工作区的视野。
根据在当前工作区选中的组件, 进行属性配置, 可配置所有组件或组
启用组件, 不能操作组
禁用组件, 不能操作组
启动选择的组件或组, 不选择启动所有
停止选择的组件或组, 不选择停止所有
根据选择的组件或组创建模版
上传已保存的模版
以上,完成了nifi的简单介绍、单机部署与简单验证和操作说明。更详细的介绍关注该专栏相关文章。